我通常在查询中使用sql参数,但在这种情况下,我需要动态创建不仅仅是参数.
有人可以对任何变量使用注入吗?除了存储过程之外,还有一种通过代码防止注入的简单方法吗?
string whereClause = "WHERE " + filter.ToString() + " > " + nextStartPoint;
string orderBy = "ORDER BY " + filter.ToString() + " DESC";
Run Code Online (Sandbox Code Playgroud)
前
string sql = "SELECT TOP(" + numItemsToGet + ") * " +
"FROM Items " +
whereClause + " " +
orderBy;
Run Code Online (Sandbox Code Playgroud)
更新
filter.ToString()是实际的列名
我很惊讶以下工作(部分ex)...我还认为你必须用sql参数引用列名.
cmd.Parameters.AddWithValue("Count", 10);
string sql = "SELECT TOP(@Count) * " +
Run Code Online (Sandbox Code Playgroud)
是的,这肯定是注射的.如果用户控制filter参数,那么他们很容易将错误的SQL注入您的语句.
防止注入攻击的最简单方法是使用SqlCommand构建命令.它旨在帮助防止此类攻击,并将采取适当的措施来保护您的输入
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |