我知道,如果我使用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/