Статьи,обзоры,справочники по PHP


Аутентификация пользователей через Web интерфейс.


Про аутентификацию пользователей написано масса статей и для оной процедуры изготовлено сотни скриптов.

Однако, в большинстве своем все эти методы рассчитаны на хранение логинов/паролей в отдельном файле, или на аутентификацию пользователей с помошью апачесвкого .htaccess.

Здесь же речь пойдет про аутентификацию реальных пользователей Unix сервера через веб-интерфейс.

Есть довольно много методов для решения этой задачи, но используют в основном два способа:

  • шифруют пароль, введенный в веб-форме и сравнивают его с паролем в файле passwd или shadow
  • используют pop3 аутентификацию.

Первый метод весьма скользкий, ибо его реализация требует прав суперпользователя (root) для открытия файла зашифрованных паролей (shadow), и, как следствие, является дырой в безопасности сервера. Он реализуется путем исполнения cgi-скрипта с правами root (suid).

Вообщем, алгоритм простой:

  • взять пару логин/пароль с Web-формы;
  • зашифровать пароль тем же алгоритмом, что и на сервере;
  • открыть файл shadow для сравнения пароля, там хранящегося с полученным с web-формы.
  • Ежели результат сравнения положителен, аутентификация прошла успешна и увы в противном случае.
  • Не забыть позакрывать все файлы.

Все вообщем-то довольно просто.

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

В Unix системах шифрование происходит в одну сторону - к зашифрованному паролю добаваляется хорошая порция избыточной информации (salt - соли), и выдернуть пароль назад оттуда не представляется возможным. Так что, "взлом" паролей возможен лишь методом подбора оного. Ну, а если пользователь легальный и пароль действительный, то зашифруя его, мы сразу же успешно проходим аутентификацию.

За что мне нравится Perl, так это ненужность изобретать велосипеды.

проверка пароля сводится к вызову стандартной системной функции crypt($text,$salt). Действует она так :

в качестве параметров подается пароль в "чистом" виде и зашифрованный, на выходе она должна выдать тот же зашифрованный пароль. Если этого не произошло, значит пароль в виде простого текста был неправильный.




- Начало -  - Назад -  - Вперед -