【问题标题】:$_SERVER["PHP_SELF"] sends user credentials in clear text$_SERVER["PHP_SELF"] 以明文形式发送用户凭据
【发布时间】:2016-01-25 17:43:41
【问题描述】:

我有一个表格。

<form name="form1" method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <p><label>User Name : </label>
    <input id="username" type="text" name="username" /></p>

     <p><label>Password&nbsp;&nbsp; : </label>
     <input id="password" type="password" name="password"/></p>

    <a class="btn" href="register.php">Signup</a>
    <input class="btn register" type="submit" name="submit" value="Login" />
</form>

使用$_SERVER["PHP_SELF"]

在提交 (POST) 数据时,用户凭据以纯文本形式发送(如下所示)

好像我用“check_login.php”替换$_SERVER['PHP_SELF'] 没有问题。

我也使用了 acunetix 扫描仪,它还显示“用户凭据以明文形式发送”。

我需要使用$_SERVER['PHP_SELF'],但没有显示凭据。

【问题讨论】:

  • $_SERVER['PHP_SELF'] 的值是多少?扫描仪警告可能意味着您应该使用 HTTPS 而不是 HTTP。
  • @vitozev,值吗? PHP_SELF,返回当前执行脚本的文件名。我也确实使用了 HTTPS……同样的问题。
  • @votozev,我也尝试使用上述表格。 if ((empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on')) { header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);出口(); }
  • 如果你必须使用php_self,请在使用前转义
  • 很明显,您的浏览器可以看到它发送的内容。你应该会看到 TCP/IP 级别的通信,比如 Wireshark。

标签: php forms security


【解决方案1】:

正在显示您收到的漏洞警报,因为当客户端发送用户凭据时,Web 服务器正在使用HTTP 而不是HTTPS

这与您的 PHP 表单无关 — 无论您如何实现它,信息仍以明文形式发送。示例:

POST /userinfo.php HTTP/1.1
Host: testphp.vulnweb.com

uname=test&pass=test

您可以看到unamepass参数以纯文本形式发送,任何人都可以截取和读取。

有关更多信息,我鼓励您阅读以下question 的答案。

虽然我们正在这样做,但如果您想让自己更加安全,您可能还想查看 Let's EncryptAcunetix ;-)

【讨论】:

    【解决方案2】:

    你误会问题了,误会$_SERVER['PHP_SELF']

    首先,您的实际问题与$_SERVER['PHP_SELF'] 无关,也与您的表单或PHP 无关。问题是因为您的网站没有使用 HTTPS 保护。如果您使用的是 HTTP,那么浏览器发送或接收的所有内容都是以纯文本形式发送的,并且可能会被拦截。如果您希望您的流量是安全的,那么您需要使用 HTTPS。这是您在服务器中配置的内容,与您的 PHP 代码中的任何内容完全分开。

    其次,您声明“我需要使用$_SERVER['PHP_SELF']...”。这实际上不是真的:您不需要在这种情况下需要使用$_SERVER['PHP_SELF']$_SERVER['PHP_SELF'] 是 PHP 程序中的一个全局变量,它包含当前页面的地址。因此,如果您在站点内访问userinfo.php,则$_SERVER['PHP_SELF'] 将包含/userinfo.php。这是您要放入表单的action 属性的值。没关系,但请理解您实际上在这种情况下需要它,因为action 的默认值是将表单提交回当前页面。换句话说,如果您完全省略$_SERVER['PHP_SELF'],您的表单将完全相同。这与您的安全警告没有任何关系,但我认为澄清这里发生的事情很重要,以帮助您了解$_SERVER['PHP_SELF'] 并不是使表单工作的神奇事物;它只是一个带有页面名称的字符串变量。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多