登录表单允许使用空白用户名和密码进行访问

时间:2011-10-16 01:08:32

标签: php authentication

我正在尝试实现一个PHP登录脚本,它可以处理3个PHP文件。使用正确的用户名和密码时,脚本可以正常工作,并且脚本甚至会在提供错误信息时阻止访问。我的问题是,当您按下表单上的提交按钮并且不插入用户名或密码时,脚本允许访问。

第一个脚本是这样的:

<form action="login2.php" method="post">
Usuario:<br />
<input type="text" name="username" class="formtext" />
Contraseña:<br />
<input type="password" name="password" class="formtext" />
<input type="submit" value="Ingresar" class="formbutton" />
</form>

正如您所看到的,表单访问“login2.php”,如下所示:

<?php
$usernames = array("user1", "user2", "user3", "superman");
$passwords = array("test", "pass2", "password3", "supermans password");
$page = "noticias.php";

for($i=0;$i<count($usernames);$i++){
  $logindata[$usernames[$i]]=$passwords[$i];
}
if($logindata[$_POST["username"]]==$_POST["password"]){
session_start();
$_SESSION["username"]=$_POST["username"];
header('Location: '.$page);
exit;
}else{
header('Location: login.php?wrong=1');
exit;
}
?> 

最后,我试图限制访问的页面在顶部添加了以下代码以确保用户已登录:

<?php require("login3.php"); ?> 

“login3.php”具有以下代码:

<?php
session_start();
if(!isset($_SESSION['username'])){
header('Location: login.php');
exit;
}
?> 

如果有人可以帮我解决这个问题,因为我从在线教程中获取了这些脚本,并且对PHP知之甚少,并且真的需要知道为什么允许使用空白用户名和密码进行访问。

3 个答案:

答案 0 :(得分:2)

if($logindata[$_POST["username"]]==$_POST["password"])

如果$logindata[$_POST["username"]]或者在这种情况下$logindata['']未定义,则PHP会抛出通知错误并返回NULL或空的内容,然后将其与$_POST['password']进行比较,这也是{{ 1}}和'' (or empty)返回true,当然会出现通知错误。

您只需添加一项检查以确保用户名也存在,例如:

(empty == empty)

答案 1 :(得分:2)

问题是,如果$_POST['username']为空,并且您将其用作数组键引用,则PHP会将该null视为VALID+undefined数组引用,因此您的密码检查会沸腾到:

if ($loginData[null] == null)

成为

if (null == null)

然后关闭用户。

答案 2 :(得分:0)

您可能想尝试类似

的内容
if($username && $password);
[
//info is provided
]
else
[
echo "You did not provide the proper information needed for login.";
相关问题