Я пытаюсь создать очень простой скрипт входа с помощью PHP. Я знаю, что система на данный момент очень открыта для SQL-инъекций и небезопасна и все это джаз. Я больше пытаюсь получить базовый уровень, прежде чем я вступлю в систему безопасности.Простой сценарий входа в систему - шифрование входа не работает при входе в систему
У меня есть сценарий, который добавляет пользователя в базу данных. Это работает; однако я застрял в подлинном сценарии входа. Когда я пытаюсь войти в систему, я получаю неверный пароль, даже если знаю, что правильно вводил пароль. Я использую шифрование md5 (опять же, я знаю, что это не безопасно), и я полагаю, что ошибка должна исходить из того, как я читаю свое шифрование в базе данных? Ввод зашифрованного кода в слот пароля из БД возвращает ту же ошибку, поэтому это что-то в моей логике пароля.
add.php - Моя регистрация скрипт
<?php
//Connects to your Database
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("myDB") or die(mysql_error());
if (isset($_POST['submit'])) {
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2']) {
die('You did not complete all of the required fields');
}
if (!get_magic_quotes_gpc()) {
$_POST['username'] = addslashes($_POST['username']);
}
$usercheck = $_POST['username'];
$check = mysql_query("SELECT username FROM users
WHERE username = '$usercheck'")
or die(mysql_error());
$check2 = mysql_num_rows($check);
if ($check2 != 0) {
die('Sorry, the username '.$_POST['username'].' is already in use.');
}
if ($_POST['pass'] != $_POST['pass2']) {
die('Your passwords did not match. ');
}
$_POST['pass'] = md5($_POST['pass']);
if (!get_magic_quotes_gpc()) {
$_POST['pass'] = addslashes($_POST['pass']);
$_POST['username'] = addslashes($_POST['username']);
}
$insert = "INSERT INTO users (username, password)
VALUES ('".$_POST['username']."', '".$_POST['pass']."')";
$add_member = mysql_query($insert);
?>
<h1>Registered</h1>
<p>Thank you, you have registered
- you may now <a href="login.php">login</a>.</p>
<?php
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr><td>Username:</td><td>
<input type="text" name="username" maxlength="60">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="10">
</td></tr>
<tr><td>Confirm Password:</td><td>
<input type="password" name="pass2" maxlength="10">
</td></tr>
<tr><th colspan=2><input type="submit" name="submit"
value="Register"></th></tr> </table>
</form>
<?php
}
?>
И login.php - Мой сценарий Войти
<?php
//Connects to your Database
mysql_connect("localhost", "username", "password")
or die(mysql_error());
mysql_select_db("myDB")
or die(mysql_error());
if(isset($_COOKIE['ID_your_site'])){
$username = $_COOKIE['ID_your_site'];
$pass = $_COOKIE['Key_your_site'];
$check = mysql_query("SELECT * FROM users
WHERE username = '$username'")
or die(mysql_error());
while($info = mysql_fetch_array($check)){
if ($pass != $info['password']){}
else{
header("Location: login.php");
}
}
}
if (isset($_POST['submit'])) {
if(!$_POST['username']){
die('You did not fill in a username.');
}
if(!$_POST['pass']){
die('You did not fill in a password.');
}
if (!get_magic_quotes_gpc()){
$_POST['email'] = addslashes($_POST['email']);
}
$check = mysql_query("SELECT * FROM users
WHERE username = '".$_POST['username']."'")
or die(mysql_error());
$check2 = mysql_num_rows($check);
if ($check2 == 0){
die('That user does not exist in our database.
<br /><br />If you think this is wrong <a href="login.php">
try again</a>.');
}
while($info = mysql_fetch_array($check)){
$_POST['pass'] = stripslashes($_POST['pass']);
$info['password'] = stripslashes($info['password']);
$_POST['pass'] = md5($_POST['pass']);
if ($_POST['pass'] != $info['password']){
die('Incorrect password, please <a href="login.php">try again</a>.');
}
else{
$_POST['username'] = stripslashes($_POST['username']);
$hour = time() + 3600;
setcookie(ID_your_site, $_POST['username'], $hour);
setcookie(Key_your_site, $_POST['pass'], $hour);
header("Location: members.php");
}
}
}
else{
// if they are not logged in
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table border="0">
<tr><td colspan=2><h1>Login</h1></td></tr>
<tr><td>Username:</td><td>
<input type="text" name="username" maxlength="40">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Login">
</td></tr>
</table>
</form>
<?php
}
?>
EDIT
Я изменил мой login.php скрипт ниже:
$check = mysql_query("SELECT * FROM users
WHERE username = '".$_POST['username']."'
AND password = '".$hashedPassword."'")
or die(mysql_error());
//Gives error if user dosen't exist
$check2 = mysql_num_rows($check);
if ($check2 == 0){
die('That user does not exist in our database.<br /><br />If you think this is wrong <a href="login.php">try again</a>.');
}
else{ // if login is ok then we add a cookie
$_POST['username'] = stripslashes($_POST['username']);
$hour = time() + 3600;
setcookie(ID_your_site, $_POST['username'], $hour);
setcookie(Key_your_site, $_POST['pass'], $hour);
//then redirect them to the members area
header("Location: members.php");
}
РЕШЕНИЕ
Фигурные его. Оказывается, у меня был лимит пароля, установленный ниже хеширования, поэтому он не соответствовал бы всему хэшированному паролю в базе данных, тем самым делая логин всегда недействительным.
Тем не менее, я бы назвал ответ Джейсона всем, кто придет сюда искать помощи.
Если вы хотите войти в систему безопасности, вы начинаете называть ее хеш-функцией вместо шифрования (поскольку они принципиально отличаются). – Silencio
Ярмарка. Я не был уверен, что то, что я говорил, было то, что точный ha –