php - 使用 $_SERVER['PHP_SELF']; vs htmlentities($_SERVER['PHP_SELF']); 对于 https 上的规范链接
问题描述
IT 管理员告诉他们,他们对新获得的网站的安全扫描利用了以下共享代码段,该代码段用于网站的头部并打开了许多漏洞,应该改为使用 htmlentities。
我遇到了这个线程,它提供了一些见解,但是在这个用例中,我不太确定漏洞是否存在或什至在可行性范围内,不是说由于服务器在 https 上而不可能吗?
如果它在 https 上,那不应该否定任何潜在的漏洞吗?
原来的
<link rel="canonical" href="https://www.ourwebsite.com<?php echo echo $_SERVER['PHP_SELF']; ?>" />
新的
<link rel="canonical" href="https://www.ourwebsite.com<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" />
解决方案
问题:用户可以控制$_SERVER['PHP_SELF']的内容
假设您的代码在 index.php 中
因此,当您调用https://www.yourserver.com/index.php时,您的代码将按预期工作。但是当有人调用时 index.php 也会调用
http://localhost/phpinfo.php/%22/%3E%3Cscript%3Ealert('Hello');%3C/script%3E%3Cbr
/%22/%3E%3Cscript%3Ealert('Hello');%3C/script%3E%3Cbr 部分称为 PATHINFO
当你尝试它时,你会看到一些 javascript 也会被执行。
一些邪恶的用户可以使用其中的任何 javascript 生成这样的链接,并通过电子邮件将其发送给他的受害者,希望他点击它,他的 javascript 将在受害者浏览器上执行。因此,他可能可以从该用户那里窃取会话 ID 并捕获他的会话
推荐阅读
- hdfs - PyArrow HDFS IO 错误的根本原因是什么?
- flutter - 是否可以使用颤振包中的代码并对其进行修改?
- c# - 在 Linq 中使用 TempData
- sql-server - 显示每个月并计数,如果为 Null,则为 0
- r - 拆分/传播一个 DF 列,其中每个观察值的不同值
- java - DataTables 警告:表 id=example - Ajax 错误
- .net-core - 为非基于 HTTP 的中间件管道实现 IAppBuilder
- sql - NOT IN 嵌套 SELECT 不起作用 - 没有返回结果 - Postgres
- html - css 和 html。如何在一行中显示两个div
- facebook - 使用 iframe 的自定义选项卡应审查哪些权限?