防止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中发送单引号附加字符串作为参数时,上面的方法会抛出异常....
在这种情况下你不需要保护- DataTable.Select()
对内存中保存的DataTable 中的datarow应用过滤器,它实际上并没有连接到/对数据库执行任何操作。
如何创建这个方法来双引号
private string MethodName(string str)
{
return str.Replace("'", "''");
}
使用
dataView.RowFilter = colName + " " + @operator + " '%" + MethodName(colValue) + "%'";
如果您在查询数据库时已经使用Sql参数(最好的方法)阻止了注入攻击,那么就没有理由在内存对象上应用注入防御登录。