漏洞描述:
很多網站把密碼放到資料庫中,在登陸驗證中用以下sql,(以asp為例)
sql="select * from user where username='"&username&"'and pass='"& pass &'"
此時,您隻要根據sql構造一個特殊的使用者名和密碼,如:ben' or '1'='1
就可以進入本來你沒有特權的頁面。再來看看上面那個語句吧:
sql="select * from user where username='"&username&"'and pass='"& pass&'"
這樣,程式将會變成這樣: sql="select*from username where username="&ben'or'1'=1&"and pass="&pass&"
or 是一個邏輯運算符,作用是在判斷兩個條件的時候,隻要其中一個條件成立,那麼等式将會成立.而在語言中,是以1來代表真的(成
立).那麼在這行語句中,原語句的"and"驗證将不再繼續,而因為"1=1"和"or"令語句傳回為真值.。
另外我們也可以構造以下的使用者名:
username='aa' or username<>'aa'
pass='aa' or pass<>'aa'
相應的在浏覽器端的使用者名框内寫入:aa' or username<>'aa 密碼框内寫入:aa' or pass<>'aa,注意這兩個字元串兩頭是
沒有'的。這樣就可以成功的騙過系統而進入。
後一種方法理論雖然如此,但要實踐是非常困難的,下面兩個條件都必須具備。
1. 你首先要能夠準确的知道系統在表中是用哪兩個字段存儲使用者名和密碼的,隻有這樣你才能準确的構造出這個進攻性的字元
串。實際上這是很難猜中的。
2.系統對你輸入的字元串不進行有效性檢查。
問題解決和建議:
對輸入的内容驗證和"'"号的處理。
本文轉自loveme2351CTO部落格,原文連結:http://blog.51cto.com/loveme23/8230 ,如需轉載請自行聯系原作者