網站建設初期,很多網站把密碼放到數據庫中,在登陸驗證中用sql="select * from user where username='"&username&"'and pass='"& pass &'"查詢用戶名、密碼,這種是很不安全的。
解決辦法:構造特殊用戶名和密碼
方法一
構造以下的用戶名:
username='aa' or username<>'aa'
pass='aa' or pass<>'aa'
相應的在浏覽器端的用戶名框內寫入:aa' or username<>'aa,口令框內寫入:aa' or pass<>'aa,注意這兩個字符串兩頭是沒有'的。這樣就可以成功的騙過系統而進入。
注:必須具備兩個條件:
1. 首先要能夠准確的知道系統在表中是用哪兩個字段存儲用戶名和口令的,只有這樣你才能准確的構造出這個進攻性的字符串。
2.系統對你輸入的字符串不進行有效性檢查。
方法二
只要根據sql構造一個特殊的用戶名和密碼,如:ben' or '1'='1,程序將會變成這樣: sql="select*from username where username="&ben'or'1'=1&"and pass="&pass&"。
注:or是一個邏輯運算符,作用是在判斷兩個條件的時候,只要其中一個條件成立,那麼等式將會成立.而在語言中,是以1來代表真的.那麼在這行語句中,原語句的"and"驗證將不再繼續,而因為"1=1"和"or"令語句返回為真值。