回答
有幾件事你可以做。
- 開始的時候使用parameterized queries還是不錯的ORM。
- 調查C# AntiXSS library。
- Sanitize您的輸入。
閱讀了進一步閱讀
SQL注入大於您所詢問的部分。你想知道進出數據庫的所有數據。實施上述建議,你應該「相當」。
當涉及到原始問題(?id=[guid]
)的主題時,您希望在提交查詢時確保使用的數據類型爲System.Guid
。如果string
是不是一個有效的GUID,那麼你知道有一個問題,你不應該完成請求(IE:甚至不發送請求到你的存儲庫以後,肯定不發送它就數據庫而言)。
聽起來像ID會是一個數字。如果這很容易 - 只需將內容轉換爲數字,然後使用此類型變量即可。如果內容中有其他內容,系統將只返回一個錯誤。
您應該做的第一件事是使SQL注入不可能。根據我的理解,這種方法不會導致SQL注入。這被稱爲「參數化輸入」。
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);
第二種方法是讓GUID不通過URL傳遞。這使得修改非常容易,因此您可能希望通過POST而不是GET來傳遞此值。這樣做不會防止SQL注入,但會使它更加困難,並且有助於確保數據的完整性。
的更多信息:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx
簡單。 始終清理輸入。切勿隱式信任或執行從外部來源(用戶,客戶端機器等)收到的內容。
對於GUID,請使用System.Guid
數據類型而不是字符串。也就是說,在SQL查詢中使用它時,不要只將GUID的字符串表示形式連接到查詢中。使用query parameters並傳遞一個實際的System.Guid
對象,該對象是從收到的字符串創建的。
如果在解析字符串時無法創建實際的System.Guid
,則表示輸入無效。此時,您甚至不應該試圖以任何方式構建SQL查詢或使用數據訪問層,只需向用戶返回錯誤即可。
只是不要將ID查詢字符串參數中的值直接傳遞到數據庫中。
你正在使用C#,所以你可以使用查詢參數或類似的實體框架,這將確保數據格式正確的SQL Server(雖然它可能不檢查它是否是一個有效的GUID - 除非你的基礎字段或查詢類型勢力)
有關SQL注入攻擊的詳細信息,這裏是一個文章,我幾年前寫的:http://colinmackay.co.uk/blog/2005/04/23/sql-injection-attacks-and-some-tips-on-how-to-prevent-them/
- 1. 避免代碼注入與MongoDB的
- 2. 避免網址編碼
- 3. PHP代碼,以避免SQL注入
- 4. 驗證網頁內容 - 避免代碼注入
- 5. 如何避免codeigniter中的sql注入
- 6. 如何避免JS代碼輸入?
- 7. 避免在R的網址編碼
- 8. 如何避免在webapp模板中硬編碼的網址
- 9. 如何避免URI類的網址
- 10. 如何避免此代碼中的GOTO
- 11. 避免SQL注入
- 12. 如何避免cookie的對象注入?
- 13. 如何避免easyhook多次注入dll?
- 14. 如何使用sp_executesql避免SQL注入
- 15. MongoDB如何避免SQL注入混亂?
- 16. 如何避免在catch塊中寫入重複的代碼?
- 17. 如何避免重複的html代碼?
- 18. 如何避免凌亂的AS3代碼
- 19. 如何避免重複的代碼?
- 20. 避免在代碼
- 21. 如何避免代碼合同中的代碼重複
- 22. 如何在下面的代碼中避免python代碼
- 23. 在X段落後注入代碼但避免表格
- 24. 如何避免代碼被插入到數據庫中
- 25. 避免MySQL注入Zend_Db類
- 26. Spring(MVC)SQL注入避免?
- 27. Guice:避免懶惰注入
- 28. 避免MySQL注入和XSS
- 29. 我如何避免手動輸入輸入代碼塊
- 30. 作曲家和包裝師 - 如何避免惡意代碼注入
同樣可以用'System.Guid'完成 – 2012-01-10 16:52:37