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

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


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

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

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

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

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

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

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

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

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

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

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

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



      Содержание раздела