Проверка имени пользователя и пароля не работает в PHP? - PullRequest
1 голос
/ 16 февраля 2012

Я написал функцию в PHP для проверки имени пользователя и пароля из базы данных MySQL и сохранения в качестве сеанса после успешной проверки. Но какое бы значение я ни вводил в поле ввода, оно одобряет его и делает успешный вход в систему. Мой код входа не работает

вот оно

function queryByUserAndPass($tableName, $username, $password){
    $queryStatement = "SELECT * FROM ".$tableName." WHERE username='".$username."' 
                      AND password='".$password."' LIMIT 1";
    return $queryStatement;
}

function checkLogIn() {

    if(isset($_POST['submit'])){
        $username = $_POST['username'];
        $password = $_POST['password'];
        $queryState = queryByUserAndPass("nepal_users", $username, $password);
        if( $resultQuery = mysql_query($queryState) ){
            $found_user= mysql_fetch_array($resultQuery);
            $_SESSION['id']=$found_user['id'];
            $_SESSION['username']=$found_user['username'];
            $message="succesful log in ".$_SESSION['username'];
            header("location:home.php");
            exit;
        }else {
            $message="error in log in";
        }    

    }

}

Скажите, пожалуйста, что не так в этом коде и почему он не работает.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012

mysql_query всегда возвращает ресурс в случае успеха или false, если в вашем коде есть ошибка.

Что вы хотите сделать:

$resultQuery = mysql_query($queryState);
if( $found_user = mysql_fetch_assoc($resultQuery)) {
    // do login stuff
    // note I used "fetch_assoc" above, because you don't use numeric indices here.
}
else $message = "Error";
0 голосов
/ 16 февраля 2012

Вы не проверяете правильность имени пользователя и пароля!

    if( $resultQuery = mysql_query($queryState) ){
        $found_user = mysql_fetch_array($resultQuery);
        if ($username === $found_user['username'] &&
          $password === $found_user['password']) {
            $_SESSION['id']=$found_user['id'];
            $_SESSION['username']=$found_user['username'];
            $message="succesful log in ".$_SESSION['username'];
            header("Location: home.php");
            exit;
        } else {
            echo "wrong username or password";
        }
    }else {
        $message="error from database: " . mysql_errno($resultQuery);
    }

ВАЖНОЕ ПРИМЕЧАНИЕ

Приведенный выше код просто иллюстрирует, где в вашем коде логическая проблема.В нем есть еще две серьезные проблемы:

  1. Это уязвимо для SQL-инъекция .Использование подготовленных заявлений является обычной практикой.Если подготовленные заявления вам недоступны, используйте что-то вроде $SAFE_USER_DATA = array_map('mysql_real_escape_string', $_POST); и используйте его вместо непосредственного чтения данных $_POST.Таким образом вы гарантируете, что ни один злонамеренный пользователь не сможет изменить ваши операторы SQL для получения доступа к вашей системе.

  2. Никогда не следует хранить пароли в виде простого текста - сохраняя salted SHA1хеш пароля приветствуется.НЕ просто используйте md5($password).Атакующие могут легко расшифровать их с помощью радужных таблиц

...