【发布时间】:2010-11-18 23:28:00
【问题描述】:
所以我正在编写一个处理程序,它使用 DataView RowFilter 属性根据 AppRelativeCurrentExecutionFilePath 过滤缓存的 DataTable。对输入进行编码以防止注入攻击的最佳方法是什么?
以下内容是否足够?有没有更好/更优雅的方式?
dataView.RowFilter = String.Format("Name LIKE '{0}%'", EncodeString(query));
private string EncodeString(string s)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
char c = s[i];
if (c == '*' || c == '%' || c == '[' || c == ']')
sb.Append("[").Append(c).Append("]");
else if (c == '\'')
sb.Append("''");
else
sb.Append(c);
}
return sb.ToString();
}
【问题讨论】:
-
我不认为你可以在这里注入 sql...只会导致异常。但是,是的,这正是我所做的。
-
如果您使用内存中的数据,为什么要使用
DataTable而不仅仅是任何集合?您可以使用Where过滤它,而不必担心注入。 -
@SergRogovtsev - 我在 09 年问过这个问题,所以它可能是一个 .NET 1.1 应用程序。企业升级缓慢。
标签: c# encoding sql-injection dataview rowfilter