我正在建立一个网站,我只希望某些用户能够立即查看它。所以我虽然设置了一个用户/通过验证,并设置了一些包含允许的用户名和密码的变量,但似乎有一个错误,因为即使我输入随机用户名或通过,你仍然可以查看该网站。这是我的代码:
的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.';
}{
}
?>
我不明白我哪里出错了?我现在已经尝试了很长一段时间但没有成功。
我已经对我的一些代码进行了排序,不确定是谁真正帮助了我。
答案 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
}
?>
请注意,这只是一个无数据库的解决方案,你应该只是“正如你所说的那样”。