Pull to refresh

Форма авторизации с отправкой зашифрованного пароля

Reading time3 min
Views15K
В этой статье я решил выложить свое представление о авторизации на сайте при помощи PHP.
Конечно если авторизация происходит на SSL риски того, что пароль будет перехвачен при помощи снифера становятся ничтожными. Но все же, такой вид авторизации не везде используется. Один из видов защиты — это содержание пароля в виде хеша. Но ведь при авторизации пароль оправляется в POST запросе на сервер и существует шанс его выловить. Поразмыслив, я решил попробовать реализовать схему авторизации при которой пароль не будет отправляться на сервер в том виде в котором он есть. И даже не его MD5 хеш. В планах было что то подобное алгоритму ms-chap.

А именно:

1) При посещении сайта неавторизированному пользователю в куке выдается уникальный id.
2) Если пользователь решил авторизоваться, при заполнении пароля генерируется хеш на базе md5 хеша его пароля и выданного ему со стороны сервера id.
3) После попытки авторизации, вне зависимости от ее итогов, id перезаписывается.

Что мы получаем в итоге? При каждой попытке авторизации генерируется новый хеш отличный от предыдущего и вылавливать его смысла нету.

Итак приступим:

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

Итак в корне сайта пользователю присваивается «соль» которая генерируется в самом начале, а так же после каждой попытки авторизации.

session_start();
//Присваиваем значение уникальный id если отсутствует
if(!isset($_SESSION['uniq'])||$_SESSION['uniq']=='')
{
$_SESSION['uniq']=uniqid();
}
?>


Далее в форме логина:


<form action="" method="post">
//поле ввода логина
        <input type="email"  placeholder="E-mail" name="login">
//поле для ввода пароля
        <input id="pass" type="password"  placeholder="Пароль" >
//скрытое поле в котором генерируется хеш пароля
        <input id="hidpass" type="hidden" name="password" value="" >
//кнопка ввода
        <button type="submit" >Войти</button>
 </form>

//Функция генерации хеша
<script>
  $(function () {
   $("#pass").on("input",function(e){ 
//При вводе данных в поле пароля автоматически происходит кодирование их в MD5 добавляется уникальный id и еще раз кодируется после чего присваивается к скрытому полю для дальнейшей отправки
        var pass=CryptoJS.MD5($('#pass').val())+'<?php echo $_SESSION['uniq']?>';
        var md5pass=CryptoJS.MD5(pass);
        $('#hidpass').val(md5pass.toString());
    });
  });
</script>

Как получаем постоянно меняющийся пароль, разобрались, осталось разобраться что с ним делать.

После отправки формы мы попадаем в функцию проверки логина и пароля. Тут тоже на вкус и цвет фломастеры разные. В моем случае вместо формы вызывается функция авторизации после итогов которой страница просто обновляется и если авторизация была успешной то мы попадаем в наше рабочее пространство. Если же итог неудачный, то мы снова глядим на форму входа.

function CheckLogin($login,$md5pass)
    {
    //Получаем пароль из базы данных 
       $pass="MD5 пароль из базы данных" ;  
    //Прибавляем к ней уникальный id полученный в индексе при посещении 
        $pass.=$_SESSION['uniq'];
    //Получаем хеш этой гремучей смеси
        $pass=md5($pass);
   //Удаляем уникальный id чтоб в следующий раз пароли опять получились новые 
        unset($_SESSION['uniq']);
   //Ну и сравниваем хеш
        if(strcmp($md5pass,$pass)==0)
        {
            echo "Авторизация прошла успешно. Если вы не переместились на страницу обновите ее";
            $_SESSION['id']=session_id();
        }
//Обновляем страницу удобным нам способом
       .......
    }


UPD: Статья предполагала не сам код, а алгоритм реализацию которого каждый видит по своему. А не для развода холивара на тему «скопировал образовалась дырка и вообще нифига не пашет» и скобки криво стоят. Но так как все комментарии уперлись именно в это пришлось убрать кот который был примитивным и подразумевал действия на не инструкции.
Tags:
Hubs:
-38
Comments113

Articles