2012-04-12 29 views
-1

我是一個Web應用程序開發人員,使用經典ASP作爲服務器端腳本。尋找一個SQL注入演示

我總是通過使用簡單的函數爲字符串參數加倍單撇號來保護我的應用程序免受SQL注入攻擊。

Function ForSQL(strString) 
    ForSQL = Replace(strString, "'", "''") 
End Function 

對於數值參數,我使用CINT,CLng函數和CDbl功能。

我經常編寫連接查詢;我並不總是使用存儲過程,我並不總是驗證用戶輸入。

我想問你,如果有人能告訴我針對這行代碼工作的攻擊:

strSQL = "SELECT Id FROM tUsers WHERE Username='" & _ 
     ForSQL(Left(Request.Form("Username"),20)) & "' AND Password='" & _ 
     ForSQL(Left(Request.Form("Username"),20)) & "'" 

這可能是一個平庸的,但我從來沒有發現一種攻擊的作品。

+2

我問了一個類似的問題:http://stackoverflow.com/questions/8506574/sql-injection-isnt-replace-good-enough – 2012-04-12 18:51:54

+0

http://isc.sans.edu/diary.html?storyid=9397 – HeavenCore 2012-04-12 19:58:05

回答

-2

這種方式沒有正常運行的SQL注入消毒輸入。缺點是檢索數據庫中的數據是你必須替換雙撇號。

sDataRetrievedFromDatabase = Replace(sDataRetrievedFromDatabase, "''", "'") 
+0

我很抱歉,但我不明白你的答案。我是意大利人,也許我無法正確理解英語。你能用一個例子來解釋嗎? – danylele 2012-04-12 22:37:46

+0

我添加了一個例子。 – 2012-04-12 22:47:26

+0

我看到你的例子。但我不明白爲什麼我必須用單引號替換雙引號。當我在數據庫中寫入一個雙數字...它只考慮一個。 – danylele 2012-04-12 23:03:14

0

我總是發現「SQLI助手2.7」(你可以下載),可以找到最/所有SQL注入。我不確定這是否會有所幫助,但它至少可以幫助測試所有SQL註釋和所有內容。我記得在我的其中一個網站上發現了一個主要的SQL注入來貶低我所有的數據庫數據。這不是你正在尋找的東西,但它可能能夠找到一條途徑。