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
沒有留言:
張貼留言