2010-01-29 92 views
0

我曾經在一些友好的堆棧溢出成員的幫助下重寫了我的代碼(特別感謝Martin B和Kev Chadders)。我現在想在這項工作之後檢查我的代碼是否仍然對SQL注入開放。我相信代碼現在可以正常工作,但是您看到的任何致盲錯誤也很樂意聽到。我的代碼現在看起來像:這些SQL查詢中是否存在SQL注入攻擊?

-code removed- 
+0

的回覆於(結果)的編輯過程中只是增加檢查什麼是結果第一次查詢後 – Phil 2010-01-29 10:26:15

+0

我也這樣做: 昏暗querystringvar的String =的Request.QueryString .ToString IfStr(querystringvar,「%20select」)然後 Response.Redirect(「/ errors/504.aspx?」&querystringvar) 錯誤/ 504.aspx?「&」error =「&querystringvar) 由於長的禁止單詞列表將重定向到錯誤頁面(在我的問題代碼加載之前) – Phil 2010-01-29 10:34:26

回答

5

看來你是從SQL注入攻擊安全的,但這樣的代碼:

Response.Write(result); 

和:

Response.Write("<b><u> --- Begin SQL Exception Message ---</u></b><br />") 
Response.Write(ex) 
Response.Write("<br /><b><u> --- End SQL Exception Message ---</u></b>") 

可以讓你打開其他形式的攻擊,如XSS。您應該設置ASP.NET控件的文本元素,而不是直接寫入頁面。

+0

感謝mark我現在要實現它 – Phil 2010-01-29 10:40:40

+0

無論在ASP.NET中執行Response.Write都是不好的做法,這對XSS是如何開放的?沒有什麼是寫入頁面的是用戶輸入。 XSS(如果它存在的話)不會因爲您將'Text'屬性設置爲ASP.NET標籤而消失。如果您要在頁面上顯示用戶輸入,則應使用AntiXSS庫。 – 2010-01-29 10:41:25

+0

感謝Wim的額外信息。爲了最佳實踐, Catch ex As SqlException SQLErrLabel.Text = ex.ToString 更合適嗎? – Phil 2010-01-29 10:45:07

2

似乎對我很好。

基本上,如果您不連接SQL字符串並使用參數化查詢,則可以安全地防範SQL注入攻擊。

2

您使用的是SqlParameters,它可以有效地清除所有SQL注入問題。