繁体   English   中英

如何获取代码以检查有效的用户名和密码组合?

[英]How do I get my code to check for valid username and password combination?

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

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.';    
}{
}
?>

我不明白我要去哪里错了? 我已经尝试了一段时间,但没有成功。

编辑

我整理了一些代码,不确定是谁真正帮助了我。

您想使用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";
           }
        }
    }
}

有两件事让我担心。 第一个为什么您的表单是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.
 }

否则,您只有一个=符号,而需要==

在if语句中,您使用的是单个等号,该等号只会将右侧的值分配给左侧的变量。 如果要进行比较,则需要使用两个等号:if($ user == $ _GET ['user'])

您应该真正看一下语法。 那是什么意思?

  • $_GET['password'] = $user1 始终为true。 [注意,您缺少一个= ]
  • &&user2始终为false

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

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

如果您希望为用户的硬编码提供临时解决方案,则可以执行以下操作:

<?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
}

?>

请注意,这只是一个无数据库的解决方案,您应该只说“现在”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM