2016年9月6日 星期二

何謂sql injcetion 以及 xss 跨站攻擊

sql injection 還有 xss 都是利用網站對使用者輸入的資料未針對特殊字元做處理的漏洞,注入惡意指令在sql查詢字串或是html語法上

sql injection

假設登入驗證使用者輸入的帳號密碼直接查詢資料庫,有查到就通過

登入驗證是以下這一串sql指令
 SELECT * FROM `memberdata` WHERE m_username = '使用者輸入的帳號' and m_passwd ='使用者輸入的密碼';

假設資料庫中有一筆資料帳密都是'admin'

下面這段是正常登入,使用者輸入帳號:admin , 密碼: admin

1、SELECT * FROM `memberdata` WHERE m_username = 'admin' and m_passwd ='admin';

但改成下面這樣也可以登入, 或說也可以查到一筆admin的資料

2、SELECT * FROM `memberdata` WHERE m_username = 'admin' # and m_passwd ='';

只要在帳號處輸入 admin'#    不用密碼即可登入

可以把1、2的指令在phpMyAdmin上run看看,都能查到一筆admin資料

因為 #字號 把後面的 and m_passwd = .......註解掉了,那段等於沒有,所以條件變成只查帳號符合的

xss 攻擊

然後 如果你在帳號欄位輸入  <script> alert('我不是文字,是會執行的js碼'); </script>
然後在php檔案裡面 echo $_POST['userName'];  它不會印出文字,而是執行js程式碼
(實際上不會執行,因為內建有預防,可以按f12看訊息)

現在假設有一個網站是可以回文的,回文會被存入資料庫,每個使用者連到該頁面都會把歷史回文列出來

假設某個使用者在回文裡面輸入 <script> alert('this is demo.');</script>,那其他人拜訪該頁面時,就會執行該程式碼,看到彈出視窗顯示 'this is demo.' 訊息,<script>標籤裡面如果改成惡意程式碼,那就…
利用使用者信任該網站,透過該網站攻擊該網站的使用者,跨站攻擊的函意似乎是這樣


預防方式都是對使用者輸入的資料做特殊符號處理,像是' , " , <, > 等等的

例如:

sql injection 用 addslashes 函數 http://php.net/manual/en/function.addslashes.php

xss 用 htmlentities 函數 http://php.net/manual/en/function.htmlentities.php

沒有留言:

張貼留言