【发布时间】:2012-01-31 07:48:34
【问题描述】:
我有以下查询字符串
"SELECT VALUE entity FROM Entities AS entity WHERE entity.Client_id
= 0 && entity.Name LIKE @searchvalue ORDER BY @sorting SKIP @skip LIMIT @limit"
使用以下参数替换
query.Parameters.Add(new ObjectParameter("skip", start));
query.Parameters.Add(new ObjectParameter("limit", limit));
query.Parameters.Add(new ObjectParameter("searchvalue", searchValue + "%"));
query.Parameters.Add(new ObjectParameter("sorting", sortField + " " + sortDirection.ToUpper()));
但我总是以异常告终:
键表达式“ORDER BY”必须至少有一个引用 立即输入范围。近 ORDER BY 子句项
我猜这是因为query.Parameters.Add(...) 全部用引号括起来?我还阅读了this,但是如果什么都没有发生,我需要query.Parameters.Add(...) 有什么好处?好吧,攻击者可能不会开始新的查询,但我猜他可以操纵当前?
【问题讨论】:
-
不熟悉entity-sql,但我猜是的,它认为,例如
fieldname asc是您想要的字段的名称。您可以尝试使用... ORDER BY @sortfield @sortdir ...并使用两个参数吗?
标签: c# entity-framework sql-injection entity-sql