|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Nikita Zaitcev 2:5020/400 24 Sep 2000 01:06:06 To : All Subject : авторизация доступа -------------------------------------------------------------------------------- * я запостил это в CGI.PERL.CHAINIK, там ничего не ответили, но и на дверь не указали. Задача такова. Hеобходимо обеспечить пользователям сайта авторизованный доступ к неким ресурсам. Управление этими ресурсами реализовано через многостраничный cgi-скрипт и аворизацию доступа нужно встроить именно в него. Почему в решении не должны быть задействованы средства ОС и веб-сервера? Потому, что необходимо иметь возможность в любой момент переместить сайт на другой хостинг, под другую ОС и другой веб-сервер, и чтобы при этом все продолжало работать, как ни в чем не бывало. Я остановился на таком алгоритме: 1) Для каждого пользователя создаем db-файл с полями login, password, key, time. 2) Hа первой странице располагаем форму авторизации - пользователь вводит свои login/password, скрипт сравнивает их с хранящимися в db. 3) Если все правильно, скрипт генерит длинное случайное выражение и записывает его в поле key. В поле time записывается текущее системное время. 4) Значение key передается на следующую страницу в виде hidden-поля формы. 5) При вызове каждой последующей страницы key-из-формы сравнивается с key-из-db и повторяется (3), т.е. key генерится заново. 6) По окончанию работы с ресурсом выдается страница с формой для logout. Скрипт очищает поля key и time, сеанс закончен. 7) При попытке авторизации (2), скрипт не только проверяет login/password, но и поле key - если оно не пустое, значит, кто-то уже зашел под этим именем и пользователь получает отказ. 8) Зачем нужно поле time - в случае (7) проверяется также таймаут - сколько времени прошло с момента последней записи key. Если это время превысило некую величину - прошлый сеанс считается прерванным (пользователь закрыл браузер в середине процесса, произошел обрыв связи, etc.), тогда обнуляем key и time и авторизуем по новой . Sorry за многословность, короче не вышло :( Собственно кодирование всего этого на Perl особой проблемы не представляет. Меня интересуют узкие и уязвимые места - если это плохое решение, то чем конкретно оно плохо? -- rgrds WildHare --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/6577c7b8dde4.html, оценка из 5, голосов 10
|