这些函数可以访问 SQL 中的特殊函数 (SqlClient)。例如“喜欢”或“之间”。他们还为它们提供了更好的通用抽象层。不要与存储过程“函数”混淆,这是另一篇文章的主题question https://stackoverflow.com/questions/11107456/do-entity-framework-functions-automatically-escape-input-to-protect-against-inje.
我似乎找不到完整答案的问题是。它们可以安全使用吗?或者我是否将系统开放给其他人?SQL注入攻击 http://en.wikipedia.org/wiki/SQL_injection?在编写常规 SqlCommand 时,我总是使用绑定变量。
但在转向实体框架时。对 SQL 语句的控制较少。我不介意,但当我连接来自浏览器的字符串并将其传递给函数时,我不禁担心。
这是一个例子:
var QueryResult = EFContext.Table.Where(x =>
SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%",
x.Column) > 0);
我做了一些测试并跟踪了发送到服务器的实际 SQL。单引号会自动转义。很明显那里有一些保护。正在进行一些消毒工作。 Insert 语句确实使用绑定变量。我应该对单引号替换感到满意吗?幕后还有其他事情发生吗?
Linq 中的每个常量、变量、参数都作为 IDbCommand 中的命令参数传递,而 IDbCommand 又由底层驱动程序转义。
除非存在错误,否则所有 EF 查询和 SQL 帮助器函数都可以安全地抵御 SQL 注入攻击。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)