dax*_*axu 7 linq entity-framework sql-injection iqueryable
我知道如果我使用linq到sql,一切都将被参数化并且sql注入安全.但是IQueryable怎么样?
例如,我可以将一些实体强制转换为Iqueryable:
var myquery = mytesttable.AsQueryable();
var qText = "name="+ "\""+DynamicSearchCondition+ "\"";
myquery = myquery.Where(qText);
Run Code Online (Sandbox Code Playgroud)
然后在运行查询时,从跟踪中我可以看到传入的DynamicSearchCondition没有参数化.
最初我认为这不是sql注入证明,但我尝试了一些例子,并且无法打破这一个.这是否意味着它是免费的sql注入(我认为现在是)?
如果这是真的,它是否意味着所有IQueryable都是sql注入安全的?
不,IQueryable它本身不是注入证明,因为它只是一个用于构建查询的接口Expression。它没有定义如何将其Expression转化为要执行的内容,例如 SQL。执行此操作的是查询Provider(存在许多查询。Linq to Objects、Linq to Entities、Linq to Excel 等等)。
也就是说,您的示例似乎使用 DynamicLinq (基于.Where(string)扩展使用)应该具有与常规 Linq to Entities 类似的参数化保护IQueryable。DynamicLinq 不会引入任何额外的SQL注入问题,因为它只是一个在IQueryable. 它所做的一切都只是转换为表达式树,而表达式树又依赖于Provider实际转换为 SQL。这并不意味着 DynamicLinq 语法本身不会受到其自身注入潜力的影响(请参阅此处的一些示例,但这些不是SQL注入)。
Microsoft 对于 LINQ to Entities 和 SQL 注入是这样说的:
尽管在 LINQ to Entities 中可以进行查询组合,但它是通过对象模型 API 执行的。与 Entity SQL 查询不同,LINQ to Entities 查询不是通过使用字符串操作或串联来组成的,并且它们不易受到传统 SQL 注入攻击。
这意味着您的 DynamicLinq 构建的 IQueryable(如果使用 LINQ to Entities 作为提供程序)仍应参数化输入。如果您的问题确实是“LINQ to Entities 注入是否有效?”,那么我能给出的最佳答案是“可能。他们已尽一切合理努力来防止这种情况发生。”。
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |