首页 > 解决方案 > Apache PHP 脚本上的 XSS 漏洞

问题描述

我有两台使用 MOD_PHP 运行 Apache 的 CentOS8 服务器。我们发现在 url 末尾附加一个斜杠会更改脚本中的 base-uri,从而创建 XSS 漏洞。
例如 http://myserver.com/Login.php/http://myserver.com/Login.php/extra_stuff/会导致相关链接和图像的 base-uri 不正确。如果 extra_stuff 包含 javascript,您可能会更改页面上的内容。

如果 Apache 有尾部斜杠并返回 404,如何阻止 Apache 将 PHP 脚本视为目录?我宁愿不必编辑每一页来添加标签。

让我困惑的是为什么下面的 Apache 配置在 PHP 脚本不存在时匹配带有斜杠和无关字符的 PHP 脚本,并将其发送到处理程序。

FilesMatch \.(php|phar)$>
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>

标签: phpfpm

解决方案


正如@CBroe 在评论中解释的那样:

我看不出这会如何造成任何漏洞,除非您在某处主动输出请求 URL 路径。仅仅因为 URL 是http://myserver.com/Login.php/extra_stuff/并且隐含地是所有相对 URL 将被解析的基本 URL,并不意味着其中的任何 JavaScript 代码都会被执行。当您将 URL 插入文档而没有任何处理和考虑时,这当然可能是 XSS 问题。

AcceptPathInfo 解释了该行为。供应商的代码确实有很多未经处理的 $_Server["PHP_SELF"] 使用,我已经更正了。


推荐阅读