JavaScript 正则表达式过滤危险脚本的四种规则与实现
本文介绍利用正则表达式过滤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> </textarea> <button id="kick">抓虫1</button> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
<textarea id="bug" cols="80" rows="5"> test </textarea> <button id="kick">抓虫2</button> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
<textarea id="bug" cols="80" rows="5"> test </textarea> <button id="kick">抓虫3</button> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
<textarea id="bug" cols="80" rows="5"> expression() test </textarea> <button id="kick">抓虫4</button> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
过滤函数的嵌套调用实现
通过以下方式即可调用:
k1(k2(k3(k4(str))))
简单过滤与智能判断的区别
上述方法仅执行单纯的脚本过滤。所谓过滤“危险脚本”,本意应是能够判断哪些内容属于“危险”脚本,对不危险的内容不进行过滤。然而,实现这一功能相当困难,其复杂程度相当于构建一个防火墙。
为什么JS调用reload后页面没有立即更新
2026-11-05 13:38:29
crypto-js 加密结果与 Java/Python 后端不一致怎么解决
2026-11-05 12:09:48
js文件缓存导致代码不更新怎么强制刷新
2026-11-04 22:30:24
JS逆向调试技巧:编写Hook脚本监控加密函数输入输出
2026-11-04 10:42:46
Babylon.js 性能优化技巧:实例化网格与遮挡剔除
2026-11-03 23:43:22
