针对.NET DataView RowFilter的注入攻击

时间:2009-08-12 14:04:01

标签: c# encoding sql-injection dataview rowfilter

所以我正在编写一个处理程序,它使用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();
}

1 个答案:

答案 0 :(得分:0)

你不能在RowFilter中注入sql。

编辑:正如所指出的那样,可以通过注入获取表中的所有行,可能类似于以下工作:

dataTable.AsEnumerable()
    .Where(r => r.Field<string>("StringColumn").Contains(userInput))
    .ToList().ForEach(r => Console.WriteLine(r.Field<string>("StringColumn")));
相关问题