0

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

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

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

编辑

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

4

5 回答 5

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";
           }
        }
    }
}
于 2013-04-11T19:48:26.657 回答
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.
 }

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

于 2013-04-11T19:41:59.633 回答
0

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

于 2013-04-11T19:44:45.750 回答
-1

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

  • $_GET['password'] = $user1 永远都是真的。[注意你少了一个=]
  • &&user2永远是的。

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

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

于 2013-04-11T19:41:29.267 回答
-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
}

?>

请注意,这只是一个无 db 的解决方案,正如您所说,“现在”应该只有您自己。

于 2013-04-11T19:47:51.500 回答