захват сеанса php - достаточно ли HTTPS? Предложения по снятию отпечатков пальцев?


Я использую HTTPS, но хочу свести к минимуму риск того, что кто-то злой создаст свои собственные файлы cookie с идентификатором сеанса, который недавно использовал кто-то другой.

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

Я не ожидаю огромного объема трафика и использую стандартные методы php генерация идентификаторов сеансов. Я считаю, что "риск" того, что кто-то действительно преуспеет (или даже попытается) захватить чью-то сессию здесь, близок к нулю.

Что я хотел бы сделать, так это каким-то образом "идентифицировать" удаленного пользователя, без использования $_SERVER['REMOTE_ADDR']. Я думаю, что злоумышленнику придется как найти действительный идентификатор сеанса, , так и , выдающий себя за различные свойства фактического пользователя.

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

Итак, изначально я хотел спросить: существуют ли какие-либо "свойства" сеанса HTTPS, которые можно было бы использовать? Будут ли они полезны? Если да, то как мне их найти? phpinfo() не раскрывает ничего конкретного HTTPS. (Это потому, что httpd не раскрывает его?)

Должен ли я просто использовать объединение HTTP_USER_AGENT + HTTP_ACCEPT + HTTP_ACCEPT_LANGUAGE + HTTP_ACCEPT_ENCODING + HTTP_ACCEPT_CHARSET или что-то подобное, что считается уникальным достаточно между пользователями?

Очень рад за все ответы! (Но, пожалуйста, прочитайте вопрос, прежде чем отвечать только ссылками на другие вопросы о StackOverflow) Спасибо!

Author: rook, 2010-07-15

2 answers

Вам необходимо убедиться, что на ваших сеансовых файлах cookie установлены флаги secure и http_only. Вам также необходимо изменить идентификатор session_id при аутентификации пользователя, чтобы избежать проблем с фиксацией сеанса.

Хотя то, что вы предлагаете, должно быть относительно безопасным с точки зрения отпечатков пальцев, на самом деле это не так уж и выборочно - ото есть много вещей, которые не следует использовать для снятия отпечатков пальцев (например, CLIENT_ADDRESS), поэтому на самом деле не очень легко что-то предложить лучше.

Помимо моих предложений выше, я бы рекомендовал потратить ваше время на изучение других потенциальных проблем безопасности.

C.

 3
Author: symcbean, 2010-07-15 15:49:10

Топ-10 OWASP является отличным подспорьем для этого класса атак. В частности, вам нужно беспокоиться об этих трех:

A2: Межсайтовые сценарии (XSS)

A3: Нарушена аутентификация и управление сеансами.

A5: Подделка межсайтовых запросов (CSRF) (Также известная как "Езда на сеансе")

Почти все переменные $_SESSION известны злоумышленнику и могут иметь любое значение. Нет смысла проверять эти переменные, как это тривиально для злоумышленника, влияют на них. Важным исключением является $_SERVER['remote_addr'], который извлекается непосредственно из TCP-сокета apache, поэтому это значение нельзя подделать или иным образом изменить. Однако, если злоумышленник находится в том же сегменте сети (например, если бы он пил кофе прямо за вами в кафе), то у злоумышленника был бы тот же ip-адрес.

 2
Author: rook, 2010-07-15 17:40:23