$ _SERVER [" PHP_SELF"]以明文形式发送用户凭据

时间:2016-01-09 13:10:40

标签: php forms security

我有一张表格。

<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)数据时,用户凭据以纯文本形式发送(如下所示)

enter image description here

我好像用'#34; check_login.php&#34;替换$_SERVER['PHP_SELF']。没有问题。

我也使用了acunetix扫描仪,它也说&#34;用户凭证以明文形式发送&#34;。

我需要使用$_SERVER['PHP_SELF'],但不显示凭证。

2 个答案:

答案 0 :(得分:1)

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

这与您的PHP表单没有任何关系 - 无论您如何实现它,信息仍然以明文形式发送。例如:

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

uname=test&pass=test

您可以看到unamepass参数以纯文本形式发送,并且可以被任何人拦截和阅读。

有关详细信息,我建议您阅读以下question的答案。

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

答案 1 :(得分:0)

你误解了这个问题,误解了$_SERVER['PHP_SELF']

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

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