用正则表达式过滤脚本的一些研究(asp.net + C#)

转载 2006年05月25日 23:46:00

在做一些网站(特别是BBS之类)时,经常会有充许用户输入html样式代码,却禁止脚本的运行的需求, 以达到丰富网页样式,禁止恶意代码的运行。
当然不能用 HtmlEncode 和 HtmlDecode 方法,因为这样连基本的html代码会被禁止掉。
我在网上搜索,也没有找到好的解决办法,倒是收集了一些脚本攻击的实例:
1. <script>标记中包含的代码
2. <a href=javascript:...中的代码
3. 其它基本控件的 on...事件中的代码
4. iframe 和 frameset 中载入其它页面造成的攻击
有了这些资料后,事情就简单多了,写一个简单的方法,用正则表达式把以上符合几点的代码替换掉:
public string wipeScript(string html)
{
System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[/s/S]+</script *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[/s/S]*script *:",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" on[/s/S]*=",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[/s/S]+</iframe *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[/s/S]+</frameset *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
html = regex1.Replace(html, ""); //过滤<script></script>标记
html = regex2.Replace(html, ""); //过滤href=javascript: (<A>) 属性
html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件
html = regex4.Replace(html, ""); //过滤iframe
html = regex5.Replace(html, ""); //过滤frameset
return html;
}
此方法输入可能包含脚本的html代码,返回则就是干净的代码了。

C# 正则表达式 过滤危险字符函数代码 防SQL注入 很全面的SQL关键字过滤

using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
  • dq9005
  • dq9005
  • 2013年05月02日 09:17
  • 2639

跨站脚本攻击-----为什么要过滤危险字符串

不算前言的前言 好像已经很久没有写过安全方面的文章了,所谓安全圈子里面,大家也许认为玄猫消失了,不过,我想,作为骇客的玄猫也许从来没有出现过吧。没错的,我是玄猫,如果前两年你看过《黑客X档案》或者《...
  • wandershi
  • wandershi
  • 2015年03月11日 15:38
  • 1023

C#关键字快速过滤方法

本篇博客讲的方案,思路很简单,还是基于撒列,把每个关键词的第一个字作为key,把关键词作为value,把所有关键词撒列在一个Dictionary中,由于一个关键字可能对应多个关键词,所以value其实...
  • juelingfeng
  • juelingfeng
  • 2014年08月07日 13:24
  • 1908

校验正则、表单验证、及防脚本注入(一)

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数...
  • sinat_26172101
  • sinat_26172101
  • 2015年08月26日 09:51
  • 1296

Java正则表达式过滤汉字

String str = "hello你好吗,我很好 thank you"; String reg = "[\u2E80-\u9FFF]"; Pattern pat = Pattern.co...
  • itmyhome
  • itmyhome
  • 2015年10月01日 23:31
  • 2931

【过滤敏感词】正则表达式

最近做了一个游戏聊天功能,其中有个过滤敏感字体的需求,其实这个功能很简单,完全前端去控制, 发送前把文本过滤一次,后端只转发就好。 一.重要性 正则表达式在编程中经常会用到 如Web前端的合法输入检...
  • small__zhang
  • small__zhang
  • 2016年07月20日 16:41
  • 5727

JavaScript正则表达式大全(过滤Emoji的最佳实践)

name = name.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, "");
  • cometwo
  • cometwo
  • 2016年05月23日 18:32
  • 15802

ASP.NET(C#)后台安全登陆代码(防XSS攻击\万能密码漏洞)

string ispostback = Context.Request["ispostbask"]; string k8user = this.txtUser.Text.Trim();...
  • yanzhibo
  • yanzhibo
  • 2014年02月22日 23:24
  • 4433

网站跨站点脚本,Sql注入等攻击的处理

using System.Text.RegularExpressions; using System.Web; /// /// Web请求安全检查:防止跨站点脚本,Sql注入等攻击,来自:http...
  • a497785609
  • a497785609
  • 2014年04月16日 17:14
  • 2937

java正则表达式 过滤特殊字符的正则表达式

// 过滤特殊字符 public staticString StringFilter(String str) throws PatternSyntaxException {  // 只允许字母和数字...
  • u014344668
  • u014344668
  • 2016年07月27日 14:34
  • 1265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用正则表达式过滤脚本的一些研究(asp.net + C#)
举报原因:
原因补充:

(最多只允许输入30个字)