У меня есть аутентификация сеанса на основе агента пользователя. После каждого запроса я проверяю, изменился ли пользовательский агент. Если это так, пользователь вышел из системы (возможно, был захвачен сеанс).
Все работало идеально, пока … некоторые пользователи IE не жаловались на проблемы после запросов ajax.
После нескольких бессонных ночей я начал регистрировать пользовательские агенты для каждого запроса и сравнивал их. И WTF, некоторые версии IE добавляют «ICAPoHTTPS» к пользовательскому агенту, если это ajax-запрос.
У кого-нибудь есть идея, почему?
Спасибо, и я надеюсь, что это поможет другим …
Полезные новости, не заметил этого.
В любом случае, я бы не стал использовать User Agent, так как он основан на программном обеспечении / заголовке, и если кто-то может перехватить сеанс и вставить куки в браузер должным образом, он, вероятно, сможет перехватить строку агента пользователя и внедрить ее тоже.
Я обычно использую REMOTE_ADDR, что также не мешает человеку, работающему из той же подсети, что и его жертва.
Редактировать:
Вы можете обойти это, отправив форму входа через ajax, а затем перенаправить при успехе. Предполагая, что сеанс является новым при отображении формы, он будет собирать стандартную строку пользовательского агента, а при входе в действие — вторичную. Таким образом, в вашей ситуации вы соберете не более двух строк User Agent, которые вы хотите проверить.
Надеюсь, вы знаете, что пользовательский агент является редактируемым заголовком и может использоваться для внедрить вредоносный код / запросы.
Других решений пока нет …