And*_*rei 10 c# sql-injection sql-order-by sql-server-2008
在我们的数据库访问层中,我们有一些动态查询创建.例如,我们有以下方法来构建ORDER BY
子句的一部分:
protected string BuildSortString(string sortColumn, string sortDirection, string defaultColumn)
{
if (String.IsNullOrEmpty(sortColumn))
{
return defaultColumn;
}
return String.Format("{0} {1}", sortColumn, sortDirection);
}
Run Code Online (Sandbox Code Playgroud)
问题是,sortColumn
并且sortDirection
都来自外部作为字符串,因此当然应该采取措施来防止可能的注入攻击.有没有人知道如何做到这一点?
Mar*_*ell 11
如果你必须处理字符串,那么白名单是最好的选择.首先,sortDirection
对于white-list应该是非常简单的:对"asc"
/进行不区分大小写的比较"desc"
,你应该设置它.对于其他人,我更倾向于将到白名单,以已知的塔,也许在预期传递Type
的数据和验证.但是在绝对压力下,你可以用正则表达式来限制(比方说)强制执行它们都是严格的字母数字(在az,AZ,0-9范围内 - 如果需要可能是下划线) - 然后添加[]
,即
return string.Format("[{0}] {1}", sortColumn, sortDirection);
Run Code Online (Sandbox Code Playgroud)
但是:严格的已知列的白名单会更好,就像方向的枚举一样.