我知道,如果我使用linq to sql,则所有参数都会被参数化并且sql注入(inject)安全。
但是IQueryable呢?

例如,我可以将某些实体强制转换为Iqueryable:

var myquery = mytesttable.AsQueryable();
var qText = "name="+ "\""+DynamicSearchCondition+ "\"";
myquery = myquery.Where(qText);

然后在运行查询时,从跟踪中可以看到传入的DynamicSearchCondition没有参数化。

最初,我认为这不是sql注入(inject)证明,但是后来我尝试了一些示例,但无法打破这一示例。
这是否意味着当时没有sql注入(inject)功能(我认为现在是免费的)?

如果是这样,是否意味着所有IQueryable都是sql注入(inject)安全的?

最佳答案

绝对容易受到注入(inject)攻击。

对于您的特定示例:

var myquery = mytesttable.AsQueryable();
var qText = "name="+ "\""+DynamicSearchCondition+ "\"";
myquery = myquery.Where(qText);

会因为以下原因而失败:
var DynamicSearchCondition= "\" or \"\"=\"";

关于entity-framework - 是否使用 Entity Framework 进行IQueryable SQL注入(inject)证明?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32886761/

10-12 00:07
查看更多