6
這些函數可以訪問SQL中的專用函數(SqlClient)。例如「喜歡」或「之間」。而且他們也爲他們提供了一個更好的通用抽象層。不要與存儲過程「功能」混淆,這是其他question的主題。實體框架的SQL運算符函數是否可以防範SQL注入?
我的問題,我似乎無法找到一個完整的答案是。他們是否安全使用,或者我打開系統到SQL injection attack?編寫常規SqlCommands時,我總是使用綁定變量。
但是轉向實體框架。對SQL語句的控制較少。我不介意,但當我連接來自瀏覽器的字符串並將其傳遞給函數時,我不禁擔心。
下面是一個例子:
var QueryResult = EFContext.Table.Where(x =>
SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%",
x.Column) > 0);
我做了一些測試,並追蹤發送到服務器的實際SQL。單引號會自動跳出。很明顯,那裏有一些保護。有一些消毒正在發生。插入語句確實使用綁定變量。我應該滿意單引號替換嗎?幕後有其他事情嗎?
測試它。分析您的數據庫以找出究竟生成了什麼SQL。 – 2013-04-08 21:07:53
@ marvc1我做過了,這就是我發現單個qoutes被轉化爲雙引號的原因。但我不是SQL注入專家,這真的很棒嗎? – 2013-04-08 21:10:22
嘗試行'x'; DROP TABLE tableName; --'看看這個表是否被丟棄。先替換表名。 – 2013-04-08 21:13:08