如何让我的代码检查有效的用户名和密码组合?

时间:2013-04-11 19:37:44

标签: php

我正在建立一个网站,我只希望某些用户能够立即查看它。所以我虽然设置了一个用户/通过验证,并设置了一些包含允许的用户名和密码的变量,但似乎有一个错误,因为即使我输入随机用户名或通过,你仍然可以查看该网站。这是我的代码:

的login.php

<body>
<form action="check.php" method="get">
<Username:<input type="text" name="user" maxlength='8'>
<Password:<input type="password" name="password" maxlength='12'>
<input type="Submit" name="Submit" value="Submit">
</form>
<?php
print "<br><code> To proceed to the main page, please give the information and then click the button. You will be automatically be redirected.<br> </code>";
?>
</body>

check.php(检查信息)

<?php

$user1 = '';
$user2 = '';
$pass1 = '';
$pass2 = '';

$_GET['user'];
$_GET['password'];

if($_GET['user'] && ($_GET['password'] = $user1 && $user2 && $pass1 && $pass2)) {
    header( "refresh:1;url=" );

} else {
echo 'You are unable to view this page yet, please try again later.';    
}{
}
?>

我不明白我哪里出错了?我现在已经尝试了很长一段时间但没有成功。

修改

我已经对我的一些代码进行了排序,不确定是谁真正帮助了我。

5 个答案:

答案 0 :(得分:2)

您希望使用POST来传递密码。

这是一种更安全的密码存储方式。

表格

<form action="check.php" method="post">
Username: <input type="text" name="user" maxlength='8'>
Password: <input type="password" name="password" maxlength='12'>
<input type="Submit" name="Submit" value="Submit">
</form>

帖子 (check.php)

$siteKey = 'YPfiC+NIY2JKXbRK_riP!nd0_7AC~9X s`%ax+|*3UpxlZAll3(E?eW#w-1`)|X ';

$users = array(
    array('user' => 'bob', 
          'password' => '56cee8ccfa519021a945a75c01c73c9538c9bce4e96842392d65e81161f8b1c9',
          'salt' => '> c>>.Sr>J-MPn@d/'),
    array('user' => 'tom', 
          'password' => 'd275d8f08ada53d42394b3f13b57f1ef8dad7405d563801d35bccc60038fd14a',
          'salt' => '=]:iK/VMb-{wYg`6+'));

if( !empty($_POST['user']) && !empty($_POST['password']) ) {
    foreach($users as $sub) {
        if( $sub[user] == $_POST['user'] ) {
           $hashPostPoassword = hash('sha256', $siteKey . $sub[salt] . $_POST['user']);

           if( $hashPostPassword == $sub[password] ) {
               //verified
           }
           else {
               echo "Wrong password";
           }
        }
    }
}

答案 1 :(得分:0)

关于这一点的两件事让我担心。第一个为什么你的表格是GET而不是POST。

另外,为什么这不是数据库驱动的。

假设你做数据库: 如果您将用户名和密码存储为纯文本,只需使用用户输入的任何内容运行查询,并查看是否返回了结果。

  Select * from users_table where username = $_POST['user'] and password = $_POST['password'];

 if(result from query) {
      //then the user exists and the info entered is correct
 } else {
    //either username and password is wrong or no such user exists.
 }

否则你只有一个=符号而需要==而不是

答案 2 :(得分:0)

在if语句中,您使用的是一个等号,它只会将右侧的值赋给左侧的变量。如果你想进行比较,你需要使用两个相同的符号: if($ user == $ _GET ['user'])

答案 3 :(得分:-1)

你应该看一下你的语法。那是什么意思?

  • $_GET['password'] = $user1 始终为真。 [注意你缺少一个=]
  • &&user2将始终 false

实际上不确定你想要什么。也许这个?

if(($_GET['password'] == $pass1 && $_GET['user'] == $user1) || ($_GET['password'] == $pass2 && $_GET['user'] == $user2))

答案 4 :(得分:-1)

如果您希望对用户进行硬编码以获得临时解决方案,您可以执行以下操作:

<?php

$users = [
    'user0' => 'password0',
    'user1' => 'password1',
    'user2' => 'password2',
    'user3' => 'password3'
];

$login    = isset($_REQUEST['login'   ]) ? $_REQUEST['login'   ] : null;
$password = isset($_REQUEST['password']) ? $_REQUEST['password'] : null;

if( ! is_null($login) && in_array($login, $users) && $password === $users[$login]) {
    // Show your web site
}

?>

请注意,这只是一个无数据库的解决方案,你应该只是“正如你所说的那样”。