c# – 在ORDER BY子句中防止SQL注入

前端之家收集整理的这篇文章主要介绍了c# – 在ORDER BY子句中防止SQL注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我们的数据库访问层,我们有一些动态查询创建.例如,我们有以下方法来构建ORDER BY子句的一部分:
protected string BuildSortString(string sortColumn,string sortDirection,string defaultColumn)
{
    if (String.IsNullOrEmpty(sortColumn))
    {
        return defaultColumn;
    }

    return String.Format("{0} {1}",sortColumn,sortDirection);
}

问题是,sortColumn和sortDirection都是从外部作为字符串,所以当然应该做一些事情来防止可能的注入攻击.有人有什么想法怎么办?

解决方法

如果你必须处理字符串,那么白名单就是你最好的选择.首先,sortDirection应该对于白名单来说是微不足道的:与“asc”/“desc”不区分大小写的比较,您应该设置.对于其他人,我的偏好是将白名单列入已知列,也许通过传入数据的预期类型并进行验证.但是绝对的压缩,你可以限制正则表达式(说)强制他们都是严格的字母数字(在a-z,A-Z,0-9范围 – 如果需要可能是下划线) – 然后添加[],即
return string.Format("[{0}] {1}",sortDirection);

但是,严格的白名单已知列将会更好一些,而枚举的方向也是如此.

猜你在找的C#相关文章