LINUX.ORG.RU

logout из Apache


0

0

Как можно качественно выполнить logout из Apache в cgi, если авторизация была по имени-паролю (basic) Те юзер, зашедший через авторизацию и поработавший со страницами-CGI - если отсоединяется путем закрытия броузера - делает неправильно в плане безопасности - поскольку TCP - это протокол, который не проверяет наличия связи (heartbeat вроде как у программеров TCP это называется) - поэтому сеанс какое-то время остается открытым (если опция KeepAlive не выключена) - и могут быть теоретически проблемы с подсадкой кого-то на некорректно завершенный сеанс. На различных WWW-интерфейсах это встречается довольно часто, а как это делается - я не понимаю.

anonymous

Вообщето все немного по-другому. HTTP клиент(бровзер) цепляется на 80-й (по-умолчанию) TCP порт сервера, делает запрос, получает ответ и все, соединение закрывается ( можешь сам проверить телнетом ). Так называемые "сессии" создаются искусственно, либо через кукизы ( cookies, что неявно используется в ASP, JSP, PHP и др. ), либо путем передачи в ХТМЛ страницы "скрытых" параметров. И то и другое можно врукопашку наваять через ЦГИ.

PETER ★★
()

Да, PETER, я что-то сбойнул насчет tcp-сессии - а ведь сам не раз через telnet емулировал клиента. Но вот что я не понимаю - допустим, клиент авторизировался. Откуда Apache знает, что запросы, идущие в последствии к нему - это именно этого клиента? Тут не в Кууках дело - можно поставить запрет на куки и брозуер все равно будет бороздить просторы Apache от своего имени. Вопрос в том - где эта метка, и чем снимается. У меня в программе на C++, вызывающимся посредством CGI, десятки HTML и сотни форм - все в одном. Эта рекурсивная программа - при любой форме или гиперрсылке она вызывает сама же себя, пере- давая параметры, которые и являются ключом к какой форме или странице перейти. После авторизации имя берется из Environ. Смена Environ на левое имя после авторизации - не влияет, Apache все равно знает "ЧЬИ" это запросы. И никак мне LOGOUT не сделать. Можно на LOGOUT поставить А-ХРЕФ на какой-то файл, который находиться ЗА ПРЕДЕЛАМИ лимитной директории - но это какое-то неудачное решения - размыкания "сессии" как такового - нет. Поэтому я навеное так вопрос поставлю - откуда Apache знает, что запросы принадлежат авторизированному юзеру.

anonymous
()

> Поэтому я наверное так вопрос поставлю - откуда Apache знает, что
> запросы принадлежат авторизированному юзеру

Механика такая: на запрос к защищенной области Apache реагирует
ответом с кодом 401 Authorization Required. Клиент должен повторить
запрос, на этот раз должным образом представившись, т.е., послав
заголовок "WWW-Authentication: blablabla"; blablabla как раз и
содержит пользовательскую информацию. До тех пор, пока клиент
посылает этот заголовок, Apache авторизует доступ. "Умный" клиент
запомнит пароль, и так и будет постоянно представляться.

Basic схема не дает Apache никаких средств контроля за доступом
после того, как он однажды случился. Клиент может сам решить, что
пора забыть пароль и спросить его заново, но это решение клиента
и только клиента.

PS: При basic схеме я бы не напрягался над такими тонкостями.

anonymous
()

Можно в CGI организовать тайм аут: например создать пустой файл когда юзер авторизирован и когда тайм-аут истечет удалять файл, соответственно каждый раз когда файла нету спрашивать пароль.
Плохо что тайм-аут и файл будут создаваться при каждом запуске скрипта. Хотя здесь можно что-нибудь сложное намутить с использованием программы-демона и базы данных, куда будет вся инфа слаться, и когда время будет истекать демон будет отправлять сигнал скрипту.Если нужно помочь с кодом пиши xidden@mail.ru.

OxiD ★★★★
()

Спасибо - я почти так все и сделал - без БД - но тайм-аут. Авторизацию правда через CGI уже делать пришлось. Да плюс на Javascript процедурку с отсчетом оставшегося времени на экшн сделал. Вроде то что хотел - сделал. Всем сенк за инфо.

anonymous
()

нужно еще раз выдать клиенту 401 Authorization Required клиент еще раз запросит у юзера логин и пароль а перед этим забудет предыдущие логин и пароль это в самом простейшем случае и будет логаут

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.