You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

简易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特殊字符为对应实体(如"→&quot;,'→&#039;),无论前端用哪种引号包裹输入,都能彻底阻断恶意代码突破上下文执行的可能。

内容的提问来源于stack exchange,提问作者Tream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:43:11