在ADO.Net Datatable中防止注入的最佳方法?

时间:2012-12-23 11:10:17

标签: c# ado.net datatable dataset

最近,我正在通过DataView以下列方式对数据表进行过滤:

        public static DataTable FilterDatatable(this DataTable dtable,string @operator, string colName, string colValue)
        {
            if (dtable != null && dtable.Rows.Count > 0)
            {
                DataView dataView = dtable.DefaultView;

                if (@operator.Equals(SqlOperator.Like , StringComparison.InvariantCultureIgnoreCase))
                {
                    dataView.RowFilter = colName + " " + @operator + " '%" + colValue + "%'";
                }
                else
                {
                    dataView.RowFilter = colName + " " + @operator + " " + colValue;
                }

                return dataView.ToTable();
            }
            return dtable;
        }

在这里,我可以编写一种防止注入的方法(我知道那些注入),但实际上,我不知道防止数据表注入的最佳方法,就像sql paramater一样。

当我在ColVal ....中发送单引号附加字符串作为参数时,上面的方法抛出异常。

2 个答案:

答案 0 :(得分:1)

在那个实例中你不需要保护 - DataTable.Select() 将过滤器应用于该DataTable中保存在内存中的DataRows ,它实际上并没有连接到/执行任何操作数据库中。

<强>更新

如何创建此方法以将单引号

的任何单个实例加倍
private string MethodName(string str)
{
    return str.Replace("'", "''");
}

这样使用,

dataView.RowFilter = colName + " " + @operator + " '%" + MethodName(colValue) + "%'";

答案 1 :(得分:1)

如果您在使用Sql参数(最好的方法)查询数据库时已经防止了注入攻击,则没有理由在内存对象中应用注入防护登录。