在nhibernate中防止Sql注入

 永不放弃2702935973 发布于 2023-02-06 12:14

在我的项目中,我有一个方法,它将serviceTags作为nhibernate动态查询中的字符串参数输入,并用''替换它.现在它已经参数化但仍然是对sql注入的威胁.所以我的问题是在没有威胁的情况下获得这种功能我该怎么办?用户输入的类型/长度检查已经在我的脑海中,我认为这不会解决整个威胁.

 public Dictionary GetCollectionStatus(string serviceTags)
 { using (var session = m_SessionFactory.OpenSession())
        {
           foreach (var resultParts in session.CreateSQLQuery(string.Format("select servicetag , " +
                                                                             "DiagnosticStatus from AssetOverview where servicetag IN ('{0}')", 
                                                                             serviceTags.Replace(",", "','"))).List())
            {
                collectionStatus.Add(((object[])(resultParts))[0].ToString(), ((object[])(resultParts))[1].ToString());
            }
        }
        return collectionStatus;
    }

Rippo.. 8

为了防止SQL注入,即使用NHibernate格式化字符串,只需执行以下操作: -

var q = session.CreateSQLQuery(
   "select servicetag, DiagnosticStatus from AssetOverview 
       where servicetag IN (:list)")
   .SetParameterList("list", serviceTags)
   .List();

NHibernate将为您提供单引号.

编辑我会做以下以及我可以看到这serviceTags是一个逗号分隔列表...

   .SetParameterList("list", serviceTags.split(','))

请注意,如果你有前导/尾随空格或空格,这可能会给你带来麻烦!

1 个回答
  • 为了防止SQL注入,即使用NHibernate格式化字符串,只需执行以下操作: -

    var q = session.CreateSQLQuery(
       "select servicetag, DiagnosticStatus from AssetOverview 
           where servicetag IN (:list)")
       .SetParameterList("list", serviceTags)
       .List();
    

    NHibernate将为您提供单引号.

    编辑我会做以下以及我可以看到这serviceTags是一个逗号分隔列表...

       .SetParameterList("list", serviceTags.split(','))
    

    请注意,如果你有前导/尾随空格或空格,这可能会给你带来麻烦!

    2023-02-06 12:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有