2015-03-05 4 views
1

У меня есть аутентификация сеанса на основе User-Agent. После каждого запроса я проверяю, изменился ли пользовательский агент. Если это так, пользователь выйдет из системы (сеанс, возможно, был захвачен).Аутентификация сеанса PHP на основе User Agent

Все прошло отлично, пока ... некоторые пользователи IE не жаловались на проблемы после запросов ajax.

После нескольких бессонных ночей я начал регистрировать пользовательские агенты для каждого запроса и сравнивал их. И WTF, некоторые версии IE добавляют «ICAPoHTTPS» к пользовательскому агенту, если это запрос ajax.

У кого-нибудь есть идея, почему?

Спасибо, и я надеюсь, что это поможет другим ...

ответ

0

Полезные новости, havn't заметил, что.

В любом случае, я бы не использовал User Agent, поскольку он основан на программном обеспечении/заголовке, и если кто-то может заблокировать сессию и включить файлы cookie в браузер должным образом, он, вероятно, может захватить строку пользовательского агента и ввести ее тоже.

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


Edit:

Вы можете ходить вокруг этого, отправив входа в форму через AJAX, и чем перенаправить на успех. Предполагая, что сеанс свежий на дисплее формы, он будет собирать стандартную строку пользовательского агента, а при операции входа - вторичную. Таким образом, в вашей ситуации вы будете собирать не более двух строк User Agent, которые вы хотите проверить.

Надеюсь, вы осознаете факт, что Пользовательский агент является редактируемым заголовком и может использоваться для inject malicious code/queries.

+0

Я думал об использовании ip-адреса, но на мобильных устройствах часто бывают динамические IP-адреса (то есть, изменение IP-адресов при каждом запросе). Также на «нормальных» интернет-соединениях есть динамические ips, и это может вызвать проблемы, если у вас длительный сеанс. – grundig

+0

Возможно, вы захотите использовать шаблон [CSRF tokenizing] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF) _Prevention_Cheat_Sheet), чем. У этого есть свои недостатки, но это довольно устойчивое решение. Зависит от вида обслуживания, над которым вы работаете. – yergo

+0

Я исправил его, удалив «ICAPoHTTPS» из пользовательского агента. Я знаю, что это не чистый путь, но на тот момент, когда он должен выполнять эту работу. Но в будущем я обязательно сделаю это с помощью входа в систему ajax и сохраню оба пользовательских агента. Да, я знаю, но поскольку я использую только хэш пользовательского агента, это не должно быть проблемой безопасности. Благодаря! – grundig

Смежные вопросы