C#中预处理防注入式攻击的方法:

secretpp 2013-12-01 07:48:20
switch (operation)
{
case "=":
whereSql = string.Format(" and {0}=@{0} ", field);

break;
case "likeAll"://左右全匹配
whereSql = string.Format(" and {0} like '%'+@{0}+'%' ", field);
break;
case "likeLeft"://左边匹配
whereSql = string.Format(" and {0} like @{0}+'%' ", field);
break;
case "likeRight"://右边匹配
whereSql = string.Format(" and {0} like '%'+@{0} ", field);
break;
case ">":
whereSql = string.Format(" and {0} > @{0} ", field);
break;
case "<":
whereSql = string.Format(" and {0} < @{0} ", field);
break;
default:
whereSql = string.Format(" and {0} {1} @{0} ", field, operation);
break;
}







完整的方法: /// <summary>
/// 返回查询条件 如果为null或null则跟它无关,否则返回and 字段=字段值 注意,它只是 and 的查询条件,没有where 左右都已留有空格
/// </summary>
/// <param name="field">传入 字段 的名称</param>
/// <param name="fieldValue">传入 字段 的值</param>
/// <param name="operation">传入 条件符号 如= < > like likeAll likeLeft likeRight 的值</param>
/// <param name="defaultValue">传入 如果为空则是0 或者其它默认值 的值</param>
/// <param name="sqlParameter">传入 参数 的值</param>
/// <param name="sqlDbType">传入 参数类型 的值</param>
/// <param name="len">传入 参数长度 的值</param>
/// <returns>如果传入的查询条件是空值或trim后是空值,则跟本查询条件无关,返回空</returns>
public static string getAndWhere(string field, string fieldValue, string operation, string defaultValue,out SqlParameter sqlParameter, SqlDbType sqlDbType, int len)
{
sqlParameter = null;
if (string.IsNullOrEmpty(fieldValue))
{
if (string.IsNullOrEmpty(defaultValue))
{
return defaultValue;
}
else
{
fieldValue = defaultValue;
}
}
else if (string.IsNullOrEmpty(fieldValue.Trim()))
{
if (string.IsNullOrEmpty(defaultValue))
{
return defaultValue;
}
else
{
fieldValue = defaultValue;
}
}
// Utility_.antivirus("d");
string whereSql = "";
switch (operation)
{
case "=":
whereSql = string.Format(" and {0}=@{0} ", field);

break;
case "likeAll"://左右全匹配
whereSql = string.Format(" and {0} like '%'+@{0}+'%' ", field);
break;
case "likeLeft"://左边匹配
whereSql = string.Format(" and {0} like @{0}+'%' ", field);
break;
case "likeRight"://右边匹配
whereSql = string.Format(" and {0} like '%'+@{0} ", field);
break;
case ">":
whereSql = string.Format(" and {0} > @{0} ", field);
break;
case "<":
whereSql = string.Format(" and {0} < @{0} ", field);
break;
default:
whereSql = string.Format(" and {0} {1} @{0} ", field, operation);
break;
}
sqlParameter = new SqlParameter("@" + field, sqlDbType, len);
sqlParameter.Value = fieldValue;
return whereSql;
}
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PaulyJiang 2013-12-04
  • 打赏
  • 举报
回复
参数化就行了
bigbaldy 2013-12-01
  • 打赏
  • 举报
回复
参数化即可,不用这么麻烦,或者直接用ORM
  • 打赏
  • 举报
回复
“预处理”是什么东西?奇怪。
小猪八Q 2013-12-01
  • 打赏
  • 举报
回复
字符串拼接,很容易出问题,要不使用SqlParameter,要不就做字符串预处理,剔除不符合规则的关键字,推荐使用前者
threenewbee 2013-12-01
  • 打赏
  • 举报
回复
用SqlParameter参数化SQL。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧