职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 968|回复: 0

用正则表达式过滤脚本的研究(ASP.net)

[复制链接]
joe 发表于 2007-2-8 19:12 | 显示全部楼层 |阅读模式
在做一些网站(特别是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代码,返回则就是干净的代码了。我做过一些简单的测试,可以满中要求,只是还存在几个疑问:

  以上考滤的情况是否比较完善, 还存在其它的脚本攻击手段吗?是否会有其它更好的解决办法?
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-10 13:42 , Processed in 0.114050 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表