2010-12-09 3 views
1

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

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

2) session_regenerate_id - Это восстанавливает идентификатор сеанса, как его использовать? Является ли session_id удаленным после того, как сеанс имеет тайм-аут или закрыт?

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

+0

`HTTP_USER_AGENT` не очень полезен для сеансов/безопасности обычным способом. – Jonah 2010-12-09 20:07:29

+0

Спасибо за комментарий. Я получил концепцию. – 2010-12-09 20:47:16

ответ

4

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

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

3

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

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

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

+0

Спасибо. Ваш ответ просвещен. – 2010-12-09 20:49:06

3

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

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

1

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

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

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

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