简易PHP脚本是否存在XSS攻击风险?自定义sanitize函数安全性验证
针对自定义sanitizeJSString函数的攻击向量
要证明这类自定义清理函数的安全性缺陷,需结合函数的具体实现漏洞构造攻击输入,以下是几种典型的可利用场景:
1. 仅转义双引号,未处理单引号
若sanitizeJSString仅替换双引号"为\",但前端代码用单引号包裹处理后的输入,构造输入:
'; alert(document.domain); //
输出到页面后会变成:
<script> var userInput = '"; alert(document.domain); //'; </script>
输入中的单引号会闭合原有字符串,//注释掉后续的闭合单引号,最终恶意代码成功执行。
2. 未处理Unicode转义字符
如果函数未过滤Unicode编码的特殊字符,构造输入:
\u0022); alert(document.domain); (\"
浏览器会将\u0022解析为双引号,绕过仅转义可见双引号的过滤逻辑,闭合字符串并执行代码。
3. 未过滤换行符
若函数未处理换行符\n,构造输入:
" alert(document.domain); //
输出后的JavaScript代码会被拆分为多行,原有字符串被换行截断,直接执行后续的alert语句。
为什么改用htmlentities()更可靠
使用htmlentities($input, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')会同时转义双引号、单引号及所有HTML特殊字符为对应实体(如"→",'→'),无论前端用哪种引号包裹输入,都能彻底阻断恶意代码突破上下文执行的可能。
内容的提问来源于stack exchange,提问作者Tream
相关产品推荐
相关产品推荐

