波斯马BOSSMA Information Technology

C#使用正则表达式过滤script脚本程序

发布时间:2011年5月10日 / 分类:ALL, DOTNET / 18,736 次浏览 / 评论

    很多时候都需要过滤字符串中的javascript等脚本程序,比如防止跨站攻击,采集信息等。网上找了很多,大多不能用,或者存在很多的漏洞和问题,并且以讹传讹的垃圾站也特别多,搜出来的就是那几个,管用的好用的寥寥无几。好歹找到几个能改造下的,看了看,都是使用正则表达式来匹配替换的。正则表达式我也看过很多遍了,但是总是记不住,没办法又查了查资料,边学习边改造。然后将改造的结果公布出来,方便大家批一批!

    先来看看效果,是不是你想要的,也证明不是吹的。

先来熟悉几个正则表达式的语法:

\s  空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f
\S   \s的补集
\w  单词字符,指大小写字母、0-9的数字、下划线
\W  \w的补集

更多正则信息,可以参考:http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html

看看如何过滤javascript引用或区块:

有时候javascript会写到Dom元素的鼠标事件中或者链接中,这时候过滤起来比较麻烦,在测试的过程中我写了三个方法:

方法一:整体去除,不能去除不被单引号或双引号包含的属性值

这个方法匹配以on开头的属性,比如,过滤的时候会整体滤除这些字符。

方法二:去除属性值


这个方法首先匹配标签,获取元素的全部属性,然后在分析元素的属性,过滤掉以on开头的属性的的值。

比如:<div id=”id1″ >这里是内容</div>

过滤的时候会滤除onclick的值,即alert(‘123’)。

方法三:整体滤除,效果较好

这个方法是方法一的变形,定义一个“组”:ScriptBlock,然后获取到匹配的字符串,然后逐个替换。

通过上边两种方法,基本上可以过滤掉全部的javascript了,还有没有漏网之鱼呢?

诶~,还有一个href中的javascript:

这样就完整了吧。如果还有漏网的,欢迎给我提出来啊。

最后还有几个滤除的方法,和上边的一并贴出来,比如过滤frame、object、html,以及自定义的字符等。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《C#使用正则表达式过滤script脚本程序

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论