防止ADO中注入的最佳方法.净数据表

本文关键字:方法 数据表 最佳 ADO 注入 防止 | 更新日期: 2023-09-27 17:49:32

最近,我正在通过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参数。

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

防止ADO中注入的最佳方法.净数据表

在这种情况下你不需要保护- DataTable.Select() 对内存中保存的DataTable 中的datarow应用过滤器,它实际上并没有连接到/对数据库执行任何操作。

如何创建这个方法来双引号

private string MethodName(string str)
{
    return str.Replace("'", "''");
}

使用

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

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