2013-07-20 52 views
2

在測試我的網站,我想知道這是沒有什麼辦法,用戶可以通過在下面的查詢一些進一步的修改取從我的數據庫中的數據SQL注入開拓登錄形式

SELECT * FROM users WHERE login='admin' AND password='1' OR '1'='1'; 

前提是他知道admin用戶名和用於'1'='1'的密碼來破解它。

他還可以添加什麼以在屏幕上回顯密碼或查找表格詳細信息?

我想這樣做是爲了瞭解SQL注入的限制未受保護的SQL可以害我們對我的介紹

+0

這就是SQL注入攻擊是什麼,你不需要知道注入的密碼查詢到使用的sql查詢。 – tuxnani

+0

是你的應用程序中的實際代碼?因爲它似乎沒有輸入實際密碼。 '='1'或'1'='1''從哪裏來? – IMSoP

+0

另請參閱http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php – IMSoP

回答

2

假設:

' OR '1'='1'; 

是一個黑客然後,輸入不消毒例如possibilites可能是無止境的:

' OR '1'='1'; drop table users; 

等。

+2

大多數服務器端語言都禁用了多個查詢,因此這可能不起作用。 – 19greg96

0

此SQL查詢: -

SELECT * FROM users WHERE login='admin' AND password='1' OR '1'='1'; 

評估爲SELECT * FROM users WHERE login='admin' AND TRUE

所以將選擇行login column值爲admin。它可以用來繞過登錄。它有一個嚴重的SQL注入漏洞。

它更好地使用準備聲明SQL注入的問題在於,用戶輸入被用作部分SQL語句。通過使用準備好的語句,您可以強制將用戶輸入作爲參數(而不是SQL命令的一部分)的內容進行處理。

+0

'AND'優先於'OR'。 – Gumbo

0

防止SQL注入的最佳方法之一是使用PreparedStatement而不是聲明

1

形式注入的用戶名和密碼框應該如下.. Z「或‘X’=」×..... 但攻擊者可以使用的URL注入技術,從您的網站獲取信息

0

如果你使用密碼哈希(而不是直接將其存儲在表中),則用戶無法通過密碼注入SQL。

如果您表看起來像這樣:

TABLE users: 
+-------+-----------+---------------------------+---------------... 
| login | salt |   password   | other columns ... 
+-------+-----------+---------------------------+---------------... 
| foo42 | 231732156 | d4154b1134b511a5461efe423 |    ... 
| bob69 | 765219179 | bba3ef876fe78ebacdccd87ff |    ... 
+-------+-----------+---------------------------+---------------... 

然後你可以存放「密碼」的用戶第一次通過生成一個一次性隨機鹽,其附加到的末尾創建自己的帳戶用戶提交的密碼並對其進行散列處理。現在,無論用戶何時嘗試登錄,只需重新計算散列並根據存儲的密碼進行檢查即可。這樣,他們可以使用像' or '1' == '1這樣的密碼(如果他們想要的話),但是你的服務器只會使用散列(例如bba3ef876fe78ebacdccd87ff