我有一个存储过程,它接收一个字符串参数“OrderByColumn”并相应地构建动态查询。
这是我的存储过程的代码部分:动态查询和sql注入
ROW_NUMBER() OVER (ORDER BY
CASE WHEN @OrderByColumn='Date' AND @OrderDirection=0 THEN tbl_Docs.Date END ASC,
CASE WHEN @OrderByColumn='Count' AND @OrderDirection=0 THEN tbl_Docs.Count END ASC,
而且在后面的功能我的代码调用存储过程,我有:
cmd.Parameters.Add("@OrderByColumn", SqlDbType.NVarChar).Value = orderByColumn;
cmd.Parameters.Add("@OrderDirection", SqlDbType.Int).Value = orderDirection;
用户通过点击设置OrderByColumn参数gridviews列标题,所以没有直接的用户输入,所以我看到没有选择注入任何东西...
在书中,他们还验证orderByColumn字符串,我不明白为什么它需要,因为正如我注意到的,用户不能输入直接表达式。
我的问题是:
是否安全?
我也读过一些书,ORDER BY子句不支持使用参数。
这是什么意思?
你为什么不使用orm? – Paco 2010-02-17 11:19:15
围绕ORDER BY的问题的最后一部分是您必须明确定义列名称。 – 2010-02-17 11:20:13