2012-01-31 179 views
9

這是我第一次使用MVC進行開發,並希望使其安全。在MVC中控制SQL注入

當我使用HtmlEncode時,它將字符串轉換爲等效的HTML字符串。

用戶可以在搜索中輸入例如ali'或ali--並且它們存在於我的數據庫中。如何從SQL注入控制我的搜索和登錄?

還有防止腳本注入的任何教程或最佳做法?

+0

你如何訪問你的數據庫? LINQ?實體框架? – 2012-01-31 12:22:29

+0

我使用正常的,你更喜歡LINQ或實體框架 – AMH 2012-01-31 12:23:45

+1

看看這[SO鏈接](http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql)... 。兩者都會檢查你的sql注入... – 2012-01-31 12:26:30

回答

15

LINQ和Entity Framework已經爲您檢查SQL注入。

但你應該閱讀無論如何文檔:

LINQ MSDN Link(部分SQL注入攻擊)

實體框架MSDN Link(部分安全注意事項查詢)

希望它能幫助!

+0

腳本注入怎麼樣 – AMH 2012-01-31 12:30:38

+0

@AMH我相信應該是另一個問題,但是這個鏈接可能會有所幫助:[asp.net tutorials](http://www.asp.net/mvc/tutorials/older-versions/security/prevent-javascript -injection-attacks-cs) – 2012-01-31 12:34:44

+0

你更喜歡LINQ或EF – AMH 2012-01-31 12:39:13

4

如果您使用LINQ執行數據庫查詢,它將爲您消除這種SQL注入風險。

+0

感謝它支持ROM數據庫,請注意腳本注入什麼 – AMH 2012-01-31 12:29:57

7

只要您使用參數化查詢或NHibernate或Entity Framework等ORM,您就不必執行任何操作來防止SQL注入。作爲對服務器的RPC調用的一部分,參數被傳遞給實際SQL語句之外的服務器。大多數ORM使用參數化查詢進行性能推理,所以它們不容易受到SQL注入的攻擊。

只有通過連接字符串值來創建SQL語句時,SQL注入纔有可能。

也就是說,您仍然需要警惕用戶輸入以防止腳本注入攻擊。幸運的是,ASP.NET MVC已經提供了請求驗證機制(請參閱Understanding Request Validation)。

+0

但我厭倦了通過傳遞參數 – AMH 2012-01-31 12:40:09

+0

無論你傳遞給參數(還是參數I meand一個DbParameter派生的對象,如SqlParameter(http://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.aspx),它將作爲一個簡單的字符串傳遞給服務器,它永遠不會執行。 如果您使用存儲的值在應用程序的其他部分通過字符串連接構造SQL語句,仍然可能會遇到麻煩。 – 2012-01-31 12:50:25