【发布时间】:2014-01-06 11:33:44
【问题描述】:
在我的项目中,我有一种方法将 serviceTags 作为 nhibernate 动态查询中的字符串参数输入,并将其替换为 ''。现在它已经参数化,但仍然对 sql 注入构成威胁。所以我的问题是在没有威胁的情况下获得这种功能我该怎么办?用户输入的类型/长度检查已经在我的脑海中,我认为这不会解决整个威胁。
public Dictionary<string, string> 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;
}
【问题讨论】:
-
+1 即使在使用 ORM 时也考虑 SQL 注入
标签: c# sql nhibernate