我有一张表格。
<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 : </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)数据时,用户凭据以纯文本形式发送(如下所示)
我好像用'#34; check_login.php&#34;替换$_SERVER['PHP_SELF']
。没有问题。
我也使用了acunetix扫描仪,它也说&#34;用户凭证以明文形式发送&#34;。
我需要使用$_SERVER['PHP_SELF']
,但不显示凭证。
答案 0 :(得分:1)
正在显示您正在接收的漏洞警报,因为当客户端发送用户凭据时,Web服务器正在使用HTTP
而不是HTTPS
。
这与您的PHP表单没有任何关系 - 无论您如何实现它,信息仍然以明文形式发送。例如:
POST /userinfo.php HTTP/1.1
Host: testphp.vulnweb.com
uname=test&pass=test
您可以看到uname
和pass
参数以纯文本形式发送,并且可以被任何人拦截和阅读。
有关详细信息,我建议您阅读以下question的答案。
虽然我们正在使用它,但您可能还想查看Let's Encrypt和Acunetix,如果您想让自己更加安全; - )
答案 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']
不是一些神奇的事情使表格有效;它只是一个带有页面名称的字符串变量。