我们使用动态linq对IQueryable列表进行排序,代码如下:
foreach (string sortField in sort)
{
if (sortField.StartsWith("0"))
{
sortFields.Add(string.Format("{0} ASC", sortField.TrimStart('0')));
}
else if (sortField.StartsWith("1"))
{
sortFields.Add(string.Format("{0} DESC", sortField.TrimStart('1')));
}
else
{
sortFields.Add(sortField);
}
return query.OrderBy(String.Join(",", sortFields));
}
sort
值来自用户输入的问题是危险的吗?
我们正在使用HP强化来扫描代码,这个工具给我们SQL injection: Linq
问题,我不知道原因......
答案 0 :(得分:0)
如果您使用String.Format
创建SQL表达式的一部分,那么您将用户代码注入SQL。
最终sortField
将被放入SQL ORDER BY
子句中:
SELECT ...
ORDER BY sortField1 ASC, sortField2 DESC, ...
想象一下,用户为第一个排序字段输入1Name; DROP ALL TABLES --
之类的东西。
现在你有了
SELECT ...
ORDER BY Name ASC; DROP ALL TABLES --, sortField2 DESC
如果您的查询将处理多个语句,那可能会非常糟糕。