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

asp.net|脚本|正则

在做一些网站(特别是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代码,返回则就是干净的代码了。
我做过一些简单的测试,可以满中要求,只是还存在几个疑问:
以上考滤的情况是否比较完善, 还存在其它的脚本攻击手段吗?
是否会有其它更好的解决办法?

时间: 2024-12-22 02:57:24

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

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

asp.net|脚本|正则 在做一些网站(特别是BBS之类)时,经常会有充许用户输入html样式代码,却禁止脚本的运行的需求, 以达到丰富网页样式,禁止恶意代码的运行.当然不能用 HtmlEncode 和 HtmlDecode 方法,因为这样连基本的html代码会被禁止掉. 我在网上搜索,也没有找到好的解决办法,倒是收集了一些脚本攻击的实例: 1. <script>标记中包含的代码2. <a href=javascript:...中的代码3. 其它基本控件的 on...事件中的代码4.

正则表达式问题,正则表达式过滤单词

问题描述 正则表达式问题,正则表达式过滤单词 利用正则表达式过滤 所有单词中筛选值包含两个p一个a一个e一个l的单词 比如 apple aplep palep apelp 解决方案 (?:?<!(?:[^p]|[^a]|[^e]|[^l])).*p|p.*(?:?<!(?:[^p]|[^a]|[^e]|[^l])) 解决方案二: var reg=/p[1]a[1]e[1]/gi;

JS使用正则表达式过滤多个词语并替换为相同长度星号的方法_javascript技巧

本文实例讲述了JS使用正则表达式过滤多个词语并替换为相同长度星号的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

C#使用正则表达式过滤html标签_C#教程

在项目中遇到这样一个需求,需要将一段html转换为一般文本返回,万能的正则表达式来了. 正则表达式来拯救你,代码如下: public static string Html2Text(string htmlStr) { if (String.IsNullOrEmpty(htmlStr)) { return ""; } string regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定

Java正则表达式过滤出字母、数字和中文_正则表达式

1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式       [^(A-Za-z)] (2) 过滤出 数字 的正则表达式    [^(0-9)] (3) 过滤出 中文 的正则表达式        [^(\\u4e00-\\u9fa5)] (4) 过滤出字母.数字和中文的正则表达式        [^(a-zA-Z0-9\\u4e00-\\u9fa5)] 2.实例源码 ** * @Title:FilterStr.java * @Package:com.you.dao

java使用正则表达式过滤html标签_java

前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字符),使用了隐藏字段,可能有人就要问了,那后台也是可以截取字符的啊,那是因为编辑器里面包含了html标签,所以后台就需要处理html标签的正则表达式,前些天上网搜了下,发现有人写好的一个类,给大家共享下,不要闲小弟落伍了... import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * Title: HTML相关的正则表达式工具类 * <

Java正则表达式过滤出字母、数字和中文

1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2) 过滤出 数字 的正则表达式 [^(0-9)] (3) 过滤出 中文 的正则表达式 [^(\\u4e00-\\u9fa5)] (4) 过滤出字母.数字和中文的正则表达式 [^(a-zA-Z0-9\\u4e00-\\u9fa5)] 2.实例源码 ** * @Title:FilterStr.java * @Package:com.you.dao * @Description:Java中过滤数

禁止Chrome加载电脑管家广告过滤脚本代码

今天用Chrome调试脚本,发现加载了以下脚本内容: /* 电脑管家chrome 广告过滤 */ var GJAD_CS = { elemhideElt : null, setElemhideCSSRules: function (selectors) { if (GJAD_CS.elemhideElt && GJAD_CS.elemhideElt.parentNode) GJAD_CS.elemhideElt.parentNode.removeChild(GJAD_CS.elemhide

正则表达式过滤HTML危险脚本

  在做一些网站(特别是bbs之类)时,经常会有充许用户输入html样式代码,却禁止脚本的运行的需求, 以达到丰富网页样式,禁止恶意代码的运行. 当然不能用 htmlencode 和 htmldecode 方法,因为这样连基本的html代码会被禁止掉. 以下是一些脚本攻击的实例: 1. <script>标记中包含的代码 2. <a href=javascript:...中的代码 3. 其它基本控件的 on...事件中的代码 4. iframe 和 frameset 中载入其它页面造成的攻