$ _SERVER ['HTTP_USER_AGENT'] и session_regenerate_id в PHP - PullRequest
1 голос
/ 09 декабря 2010

После прочтения отличного поста о безопасности сеанса PHP. У меня есть два вопроса из обсуждения.

1) $ _ SERVER ['HTTP_USER_AGENT'] - Это получает информацию о браузере пользователя и другие детали, и с тех порчеловек может получить доступ к своей учетной записи с другого компьютера, тогда как это полезно?

2) session_regenerate_id - это восстанавливает идентификатор сеанса, как его использовать?Идентификатор сеанса удален после истечения времени ожидания или закрытия сеанса?

Спасибо за вашу помощь. Я ценю каждый просмотр и ответ.

Ответы [ 4 ]

4 голосов
/ 09 декабря 2010

$ _ SERVER ['HTTP_USER_AGENT'], вы можете использовать эту информацию, когда используете специальные функции, которые могут не работать для всех, или если они хотят получить представление о своей целевой аудитории.Это также важно при использовании функции get_browser () для получения дополнительной информации о возможностях браузера.Имея эту информацию, пользователь может быть перенаправлен на версию вашего сайта, наиболее подходящую для его браузера.

session_regenerate_id, когда он переименовывает идентификатор сеанса, он не удаляет старый сеанс, оставляя его активным и потенциально пригодным для использования хакером.Это не представляет проблемы, если функция используется только во время создания нового сеанса в качестве средства предотвращения фиксации сеанса, что является предполагаемым использованием между прочим.Однако это делает его абсолютно бесполезным, если используется в каждом запросе на основе сеанса, чтобы предотвратить утечку сеанса через HTTP_REFERER и т.п., поскольку предыдущий идентификатор сеанса все еще можно использовать.Это также означает, что изменение идентификатора для «действий», как некоторые сценарии для предотвращения кражи сессии, также не имеет смысла;на самом деле это удваивает количество идентификаторов сеансов для одного и того же пользователя, что лишь упрощает определение его личности.Более того, это означает, что при каждом вызове функции происходит дублирование количества записей сеансов, которые будут зависать до тех пор, пока они не будут считаться истекшими и удаленными процессом сборки мусора.

3 голосов
/ 09 декабря 2010

1) Сессии не привязаны к учетным записям, они привязаны к сеансам браузера.Вы можете использовать информацию о пользовательском агенте, чтобы узнать, пытается ли этот другой пользовательский агент перехватить сеанс.Однако это не безотказно.Вы также можете использовать такие вещи, как IP-адрес пользователя (или заданный диапазон его значений) для перехвата попыток угона.

2) Время от времени вызывая session_regenerate_id, вы уменьшаете вероятность того, что кто-то перехватит сеанс,Это особенно верно, если идентификатор сеанса передается в URL.Например, скажем, кто-то случайно вставил ссылку в чат с SID в URL.Если вы периодически обновляете идентификатор сеанса, пользователи, увидевшие эту ссылку, не смогут перехватить сеанс с ним, так как идентификатор уже изменился бы.

3 голосов
/ 09 декабря 2010

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

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

session_regenerate_id() не удаляет сеанс.Он просто меняет свой идентификатор на недавно созданный.Чтобы старый файл сеанса не зависал до автоматического удаления системой, вы можете удалить его самостоятельно, установив для необязательного параметра значение true.Его использование состоит в том, чтобы избежать атак фиксации сеанса , когда злоумышленник может получить доступ к данным существующего сеанса, зная и представляя свой идентификатор серверу.

1 голос
/ 09 декабря 2010

Я постараюсь ответить на ваши вопросы снизу вверх: session_regenerate_id () полезен для предотвращения атак фиксации сеанса, когда злонамеренный пользователь, получивший ваш идентификатор сеанса, захватывает ваш сеанс и затем может действовать как вы. Когда вы регенерируете сеанс, вы можете отслеживать последний идентификатор сеанса в базе данных или что-то подобное, и разрешать доступ только с самым последним идентификатором сеанса (кстати, если вы обновляете sessid достаточно часто, это не даст пользователям просматривать ваш сайт с несколькими браузеры / окна), в противном случае старые сеансы будут доступны по умолчанию (если вы не передадите логический параметр true вызову функции session_regenerate_id).

Некоторые сумасшедшие в плане безопасности люди предложат восстанавливать идентификатор сеанса после каждого запроса, но вы также можете отслеживать переменную сеанса, которая увеличивается с каждым запросом, и просто восстанавливать каждое число запросов X (5 или 10 или что вы считаете достаточным). сумма для вашего уровня безопасности). Другой вариант - восстановить идентификатор сеанса во время повышения привилегий, например при входе в систему.

Что касается HTTP_USER_AGENT, он в основном полезен для реализации специфичных для браузера / клиента функций (например, отображение ссылки «Get Chrome!», Когда пользователи посещают ваш сайт с помощью Firefox или IE).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...