php - 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>
解决方案
正如@CBroe 在评论中解释的那样:
我看不出这会如何造成任何漏洞,除非您在某处主动输出请求 URL 路径。仅仅因为 URL 是
http://myserver.com/Login.php/extra_stuff/
并且隐含地是所有相对 URL 将被解析的基本 URL,并不意味着其中的任何 JavaScript 代码都会被执行。当您将 URL 插入文档而没有任何处理和考虑时,这当然可能是 XSS 问题。
AcceptPathInfo 解释了该行为。供应商的代码确实有很多未经处理的 $_Server["PHP_SELF"] 使用,我已经更正了。
推荐阅读
- python - 您的 Config.prc 文件必须通过 load-display 或 aux-display 命名至少一个有效的 panda 显示库。错误
- xamarin.forms - Xamarin.Forms (iOS 14.1) Observables 针对 NSUserDefaults 使用带点的键不会被触发
- sql - 如何使用动态表名?
- azure-devops - 如何使用其他变量的运行时替换来获得 Release 变量
- javascript - 将特定的 npm 包更改为本地路径以在本地测试
- mysql - 将“null”值传递给 node.js 中的 MySQL 数据库
- html - 尽管格式正确(我认为),网格 CSS 仍无法验证
- vue.js - [Vue 警告]:挂载钩子错误:“TypeError:this.$refs.appConfirm.setCellphone 不是函数”
- r - 自定义模式栏 R
- java - 如何创建 n 个线程并使用它们