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

URL中XSS攻击致HTML body追加字符串的防护方案咨询

XSS攻击防护问题及解决方案

问题描述

存在XSS攻击的URL:

www.example.com/login.php/'%22--%3E%3CsVg/onLOad=document['body']['append'](%603cACF1BD%60['repeat'](2))%3E

解码后内容:

www.example.com/login.php/'"--><sVg/onLOad=document['body']['append'](`3cACF1BD`['repeat'](2))>

该攻击会向HTML body中追加指定字符串。我尝试用strip_tags()函数清理URL,代码如下:

$url = strip_tags($site_url.$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);

<meta property="og:url" content="<?php echo $url; ?>" />

但strip_tags()无法阻止字符串追加到body中,请问该如何防护?

解决方案

核心问题

strip_tags()仅能移除HTML/PHP标签,但本次攻击是通过URL编码注入了可执行的JS事件(onLoad),strip_tags()既不会处理属性中的恶意代码,也不会对HTML属性值做转义,导致恶意代码仍能在content属性中触发执行。

正确防护方式

当内容输出到HTML属性(比如meta的content)时,必须使用HTML属性转义函数,PHP中优先使用htmlspecialchars(),并指定完整参数:

$url = htmlspecialchars($site_url . $_SERVER['PHP_SELF'] . "?" . $_SERVER['QUERY_STRING'], ENT_QUOTES, 'UTF-8');
?>
<meta property="og:url" content="<?php echo $url; ?>" />
  • ENT_QUOTES:同时转义单引号和双引号,适配不同的属性引号包裹场景
  • 指定UTF-8编码:避免转义后出现乱码,保证特殊字符转义准确

额外防护建议

  • 替换$_SERVER['PHP_SELF']:该变量可能被用户篡改,建议用$_SERVER['SCRIPT_NAME']替代,它仅包含当前脚本的路径,不会携带注入的恶意内容
  • 校验URL格式:对拼接后的URL做格式验证,过滤非法字符,确保符合合法URL规则
  • 配置CSP(内容安全策略):在HTTP响应头中设置CSP规则,限制脚本的执行来源,即使出现注入也无法执行恶意JS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:13:14