Не войти в систему ..? - PullRequest
       1

Не войти в систему ..?

0 голосов
/ 15 февраля 2011

Может кто-нибудь определить, почему это не будет работать? Я получаю "Не соответствует!" когда я пытаюсь войти? Пароль в базе данных хэшируется в md5, но это все равно должно войти в систему. Спасибо заранее. РЕДАКТИРОВАТЬ: я также получаю ошибку заголовков уже отправлено, это для строки 16, session_start ();

<?php

session_start();

$username = $_POST['username'];
$password = $_POST['password'];

if ($username && password)
{
include("scripts/connect.php");
mysql_select_db("table") or die("Could not connect");

$epass = md5($password);
$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$epass'");

$nunmrows = mysql_num_rows($query);

if ($numrows !== 0){

    while($row = mysql_fetch_assoc($query)){
        $dbusername = $row['username'];
        $dbpassword = $row['password'];
    }
    //check match
        if ( $username == $dbusername && $password==$dbpassword){
            echo "You're in!";
        }
        else
            echo "Does not match!";

    }
    else
        echo "Not found";
}
else
    die("Please enter in a username and password?");

?>

Ответы [ 4 ]

2 голосов
/ 15 февраля 2011

Короче говоря, потому что вы сравниваете начальное значение пароля ($ password) с хэшированным значением из базы данных ($ dbpassword).

В любом случае, это ужасный кусок кода, который у вас естьтам я даже не могу подсчитать, сколько там нет-нет.

1 голос
/ 15 февраля 2011

Сначала выясните, какие значения имеют все переменные, $username, $password, $dbusername и т. Д.

Кроме того, пароль, который вы получаете из БД, является хешем MD5, поэтому вам нужночтобы сравнить это значение с хешем, а не с обычным текстовым паролем:

if( $username == $dbusername && $epass==$dbpassword)

Но так как вы уже указали это условие в своем SQL-запросе, вы можете просто отбросить его:

if( $username == $dbusername)
0 голосов
/ 15 февраля 2011
if ( $username == $dbusername && $password==$dbpassword)

$dbpassword - хеш, $password - нехешированный пароль. Они не совпадают.

Также не нужно проверять, совпадает ли пароль в коде, поскольку он уже найден в базе данных.

Кроме того, в вашем коде есть уязвимости внедрения SQL.

0 голосов
/ 15 февраля 2011
if ( $username == $dbusername && $password==$dbpassword){
            echo "You're in!";
        }

Должен стать (потому что $ dbpassword уже хэшируется с помощью md5)

if ( $username == $dbusername && $epass==$dbpassword){
            echo "You're in!";
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...