JavaScript 正则表达式过滤危险脚本的四种规则与实现

作者:缓存笔记

时间:2026-10-22

浏览:391

本文介绍利用正则表达式过滤JavaScript中危险脚本的四种核心规则。通过匹配script/link/style/iframe标签、on事件属性、javascript/vbscript协议链接以及expression表达式,实现对潜在恶意代码的识别。文中展示了嵌套调用实现过滤的逻辑,并讨论了简单过滤与智能判断危险脚本的区别。

文章目录

JavaScript 过滤危险脚本的正则规则

以下是用于匹配危险内容的字符串规则:


1、<(script|link|style|iframe)(.|\n)*<\/\1>\s*


2、\s*on[a-z]+\s*=\s*("[^"]+"|'[^']+'|[^\s]+)\s*(?=>)


3、\s*(href|src)\s*=\s*("\s*(javascript|vbscript):[^"]+"|'\s*(javascript|vbscript):[^']+'|(javascript|vbscript):[^\s]+)\s*(?=>)


4、epression\((.|\n)*\);?


掌握了这些规则后,执行过滤操作便顺理成章。


<textarea id="bug" cols="80" rows="16"> <button id="kick">抓虫1</button>  <iframe></iframe> <link href='test.css'></link> <style> a { height:expression(alert('hei')); } </style> <&#47textarea> <button id="kick">抓虫1</button> 

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]


<textarea id="bug" cols="80" rows="5"> test <&#47textarea> <button id="kick">抓虫2</button> 

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]


<textarea id="bug" cols="80" rows="5"> test <&#47textarea> <button id="kick">抓虫3</button> 

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]


<textarea id="bug" cols="80" rows="5"> expression() test <&#47textarea> <button id="kick">抓虫4</button> 

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]


过滤函数的嵌套调用实现

通过以下方式即可调用:


k1(k2(k3(k4(str))))



简单过滤与智能判断的区别

上述方法仅执行单纯的脚本过滤。所谓过滤“危险脚本”,本意应是能够判断哪些内容属于“危险”脚本,对不危险的内容不进行过滤。然而,实现这一功能相当困难,其复杂程度相当于构建一个防火墙。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章