加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:42:05 所属栏目:百科 来源:网络整理
导读:在我们的数据库访问层,我们有一些动态查询创建.例如,我们有以下方法来构建ORDER BY子句的一部分: protected string BuildSortString(string sortColumn,string sortDirection,string defaultColumn){ if (String.IsNullOrEmpty(sortColumn)) { return defau
在我们的数据库访问层,我们有一些动态查询创建.例如,我们有以下方法来构建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);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读