Вход в систему с помощью шифрования sha1 () - PullRequest
0 голосов
/ 12 января 2011

Эй, ребята, я добавил это в свой код регистрации:

$password=mysql_real_escape_string(sha1($_POST['password']));

и теперь он вставляет пароль в базу данных, пока он зашифрован. Но вход в систему, похоже, больше не работает. Вот код для входа.

function checklogin($username, $password){
            global $mysqli;

        $password=sha1($password);
            $result = $mysqli->prepare("SELECT * FROM users WHERE username = ? and password=?");
            $result->bind_param("ss", $username, $password);
            $result->execute();

        if($result != false){

            $dbArray=$result->fetch();


            if(!$dbArray){
                echo '<p class="statusmsg">The username or password you entered is incorrect, or you haven\'t yet activated your account. Please try again.</p><br/><input class="submitButton" type="button" value="Retry" onClick="location.href='."'login.php'\">";
                return;
            }
            $_SESSION['username']=$username;

            if(isset($_POST['remember'])){
                setcookie("jmuser",$username,time()+60*60*24*356);  
                setcookie("jmpass",$password ,time()+60*60*24*356);
            }

        redirect();
        }

Ответы [ 2 ]

3 голосов
/ 12 января 2011

Не проектируйте систему аутентификации, если вы новичок в криптографии и безопасности. Это фактический ответ.

Вы не авторизуетесь с помощью sha1. Вы не храните такие пароли. Вы не аутентифицируетесь так. Вы не создаете сеансовые ключи или файлы cookie такого типа.

Вам необходимо ознакомиться с лучшими практиками.

Вот ссылка на стандарт RSA PKCS # 5 v2.1 для парольной криптографии . Вы должны начать здесь для понимания вопросов, связанных с паролями.

Вы должны прочитать PKCS # 3 или RFC2631, чтобы понять, как настроить ваши куки.

Вам следует прочитать информацию OWASP об идентификаторах сеансов, чтобы предотвратить перехват сеансов.

Существует множество учебных пособий по этому материалу, но я понимаю, что трудно сказать, что является хорошей информацией, а что плохой, когда каждый делает свои собственные заявления. Я предлагаю начать с этих курсов от Google по шифрованию, это может дать вам базовые знания, которые помогут вам понять, что хорошо, а что плохо.

Лучше всего использовать одну из давно существующих и проверенных схем аутентификации.


С учетом всего этого вы, вероятно, дважды запускаете переменную $ password через sha1.

0 голосов
/ 19 августа 2012

Вам нигде не нужна строка mysql_real_escape_string для этого. Кроме того, вместо сохранения пароля в $ _COOKIE, создайте уникальный идентификатор / логин и хэш пользовательского агента, возможно, путем хеширования

$key=md5(time().uniqueid().$user_id); $ua=md5($_SERVER['user_agent']);

и сохраняйте $ key & $ ua в базе данных пользователей вместе со временем истечения. Также сохраняйте $ user_id, $ key и $ ua в файлах cookie (и сессии) с соответствующим истечением срока действия.

Затем, когда вы найдете пользователя с cookie / сеансом с установленным ckey / ua, проверьте, совпадает ли его текущий user_agent с сохраненным, соответствует ли ключ $ ключу в db для пользователя и истек ли срок действия. (Не доверяйте истечению срока действия файлов cookie, они могут быть расширены вручную)

...