首页 > 解决方案 > 使用 $_SERVER['PHP_SELF']; vs htmlentities($_SERVER['PHP_SELF']); 对于 https 上的规范链接

问题描述

IT 管理员告诉他们,他们对新获得的网站的安全扫描利用了以下共享代码段,该代码段用于网站的头部并打开了许多漏洞,应该改为使用 htmlentities。

我遇到了这个线程,它提供了一些见解,但是在这个用例中,我不太确定漏洞是否存在或什至在可行性范围内,不是说由于服务器在 https 上而不可能吗?

这是处理表单 PHP 最安全的方法吗

如果它在 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']); ?>" />

标签: php

解决方案


问题:用户可以控制$_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 并捕获他的会话


推荐阅读