Regex.Replace 通过正则表达式替换

loveshuang942 2013-02-17 05:08:53
各位大侠们,帮帮小弟吧。我现在想做一个防SQL注入的页面 需要过滤 and 等关键字,
像acband、andabc、avandc的不需要过滤替换,只要 and 前后不是字符,数字和下划线的 都要给AND直接替换掉。该如何实现呢?

private static string sqlFileterStr = "delete|drop|select|null|where|@@|#|$|max|sysadmin|db_owner|db_name|cmdshell|" +
"'|;|and|or|exec|insert|update|=|count|%|chr|mid|master|truncate|char|declare|" +
"--|net user|xp_cmdshell|/add|exec master.dbo.xp_cmdshell|net localgroup administrators|asc|''|from|";

private static string FilterString(string badString, string content)
{
Regex objRegex = new Regex(badString, RegexOptions.IgnoreCase);
content = objRegex.Replace(content, "");
return content;
}
我现在的代码是这样写的,只要发现关键字就会被替换。我想要的效果是当关键字前后不是数字,下划线,字符的才被替换。
...全文
361 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveshuang942 2013-02-18
  • 打赏
  • 举报
回复
公司以前的人写的,发现了会乱替换,所以才想出这个办法的,如果哪位大侠有好的方法防SQL注入的。指引下,谢了。
Icedmilk 2013-02-18
  • 打赏
  • 举报
回复
引用 2 楼 hjywyj 的回复:
(?is)(?<=^|\s)and(?=\s|$)
+1
dalmeeme 2013-02-18
  • 打赏
  • 举报
回复
你SQL参数化不就行了,还替换什么。
phommy 2013-02-17
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
可怜的公司。 这种想当然的“替换”违背了基本的程序设计要求、基本的业务逻辑设要求。 比如说有个“日志信息”中包含char或者#号,就算前后都不是什么“字符、下划线”,你凭什么给人家录入信息改的面目全非? 人家录入什么信息就应该写入数据库什么信息。凭什么替换?替换为什么才合适?
“可怜的公司”出境率相当高啊。。。 说的在理,不用参数方式纯靠拼sql的话防注入只需要写一种替换:Replace("'", "''")
  • 打赏
  • 举报
回复
可怜的公司。 这种想当然的“替换”违背了基本的程序设计要求、基本的业务逻辑设要求。 比如说有个“日志信息”中包含char或者#号,就算前后都不是什么“字符、下划线”,你凭什么给人家录入信息改的面目全非? 人家录入什么信息就应该写入数据库什么信息。凭什么替换?替换为什么才合适?
  • 打赏
  • 举报
回复
(?is)(?<=^|\s)and(?=\s|$)
bdmh 2013-02-17
  • 打赏
  • 举报
回复
[\s]+and[\s]+

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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