Вопрос: как-то странно реализована система аутентификации. Как она работает?
1. Форма авторизации содержит в себе два текстовых поля, в которые пользователь вводит данные: логин (login), пароль в открытом виде (pwd),
2. Форма авторизации содержит в себе три скрытых поля: случайная строка («блокнот», notepad), индекс (i) и скрытый пароль (password).
3. Когда пользователь обращается к странице, на которой есть форма авторизации, для него генерируется случайная строка. Эта строка записывается в сессии.
4. Поскольку пользователь может открыть несколько страниц (а форма авторизации есть на всех страницах, когда пользователь не авторизовался), то, чтобы система не «забыла» эту случайную строку для предыдущих страниц, в сессии запоминается несколько строк. Эти строки различаются по индексу.
5. Когда пользователь вводит логин и пароль, при помощи JavaScript вычисляется значение
password=sha1(sha1(pwd)+notepad)
6. В строку pwd записывается пустая строка. Это нужно для того, чтобы пароль не передавался по сети в открытом виде. Это можно увидеть невооруженным взглядом: когда ты нажимаешь «вход», в браузере в строке пароля ты можешь видеть, что пароль стирается.
7. В строку notepad тоже записывается пустая строка - она уже есть на сервере и передавать ее назад второй раз не требуется.
8. В MySQL хранится $pwd=sha1(пароль)
9. На стороне клиента определяется значение $notepad на основании индекса, пришедшего из формы.
10. На стороне сервера вычисляется значение
$password=sha1($pwd.$notepad)
11. Сравниваем полученное значение $password со значением password, пришедшим из формы. Если значения совпали, то пользователь ввел правильный пароль.
Дополнительная информация:
Более подробное объяснение, если то, что выше - не понятно:
http://phpclub.ru/talk/showthread.php?postid=154561#post154561
Форма авторизации службы passport: passport.login
Реализация алгоритма аутентификации по принципу http digest: http.login