Apache PHP 脚本上的 XSS 漏洞

XSS vulnerability on Apache PHP scripts

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

如果 Apache 有尾部斜线和 return 404,我如何阻止 Apache 将 PHP 脚本视为目录?我宁愿不必编辑每个页面来添加标签。

让我感到困惑的是,为什么下面的 Apache 配置将 PHP 脚本与尾部斜杠和无关字符相匹配,而实际上它并不存在,并将其发送到处理程序。

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

正如@CBroe 在 中解释的:

I don’t see how this would create any vulnerability though, unless you actively output the request URL path somewhere. Just because the URL is http://myserver.com/Login.php/extra_stuff/ and that implicitly is the base URL all relative URLs will get resolved against, does not mean any JavaScript code in there would get executed. When you insert the URL into the document without any treatment and consideration, then this can of course be an XSS issue.

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