PHP Session Security: полезность проверки $ _SESSION ['HTTP_USER_AGENT'] - PullRequest
1 голос
/ 03 августа 2011

Потоки, такие как Фиксация / перехват сеанса PHP , и некоторые люди, такие как Крис Шифлетт, рекомендуют проверить пользовательский агент ($_SESSION['HTTP_USER_AGENT']), чтобы помочь проверить правильность сеанса. Некоторые ресурсы даже рекомендуют что-то вроде этого:

<?php

$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'SHIFLETT';

/* Add any other data that is consistent */

$fingerprint = md5($string);

?>

Тем не менее, Крис Снайдер говорит, что «совокупность агентов браузера незначительна по сравнению с совокупностью пользователей, поэтому для каждого пользователя невозможно иметь отдельного агента пользователя. Более того, это не так». трудно подделать пользовательский агент. И поэтому мало смысла проверять этот показатель как доказательство достоверности сеанса "(Глава 7, стр. 103).

Очень трудно знать, что делать, когда кто-то сталкивается с противоречивым советом, и когда некоторые из советов могут быть устаревшими (например, пример Shiflett / PHPSec выше, отметка времени которого, как представляется, пятница, 18 марта, 2005). Более новый совет, такой как Снайдер (дата публикации: 9 декабря 2010 г.), может показаться лучше, но так ли это всегда? (Например, несмотря на то, что вы потратили много времени, рекомендуя использовать mysqli, Snyder полностью игнорирует то, что пользователи Stack Overflow, по-видимому, согласны, является лучшим выбором - PDO - поэтому я не полностью продан на Snyder как окончательный надежный эксперт).

Таким образом, я предполагаю, что мой вопрос состоит из двух частей: одной конкретной (стоит ли мне беспокоиться об изучении пользовательского агента?) И еще одной общей (чьему совету я должен доверять, когда речь заходит о новейших разработках в PHP Security?), С моим очевидным предвзятость "доверяй людям на переполнении стека!" - или я бы не стал спрашивать в первую очередь, потому что краудсорсинг наиболее актуальное мышление часто является лучшей идеей.

После полезного обсуждения в комментариях с @Radu, чтобы прояснить вопрос HTTPS -

Снайдер, кажется, говорит две вещи: 1.) HTTPS делает другие инструменты менее необходимыми или ненужными. 2.) В ситуациях, когда нельзя использовать HTTPS, все еще не очень полезно проверять пользовательский агент (и это, похоже, тот момент, когда он не соглашается с некоторыми, возможно, более старыми советами).

Ответы [ 3 ]

3 голосов
/ 03 августа 2011

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

Если вы хотите настоящую защиту, используйте HTTPS.

0 голосов
/ 03 августа 2011

Проблема с сессиями в том, что вам нужен только идентификатор сессии, чтобы использовать эту сессию.Если вы знаете действительный идентификатор сеанса, вы можете использовать этот сеанс.Так работают сеансы.

Теперь некоторые предлагают использовать дополнительные данные для проверки правильности использования определенного сеанса определенным клиентом.Идентификатор пользовательского агента является таким предполагаемым значением, поскольку он является своего рода уникальным (см. Panoptoclick , чтобы проверить свой собственный) и не изменяется во время сеанса (в отличие от некоторой другой информации, предоставленной клиентом).

Но это только снижает вероятность фиксации сеанса и предотвращает случайное использование чужого сеанса в случае перехвата сеанса.Потому что злоумышленник может попытаться получить идентификатор агента пользователя жертвы и подделать его при исправлении или угоне сеанса.И здесь не имеет значения, храните ли вы идентификатор агента пользователя в виде простого или в виде (соленого) хэша.

Лучше использовать уже проверенные меры защиты.

0 голосов
/ 03 августа 2011

Пользовательский агент сам по себе не является полностью защищенным, но он добавляет тонкий слой поверх других средств защиты. Идет дискуссия о том, что должно идти к отпечатку пальца. Но тем не менее это добавляет принципу защиты на глубине. Вы можете установить cookie и использовать его в сочетании с пользовательским агентом и определенным словом для создания отпечатка пальца. Я хочу сказать, что это немного повышает безопасность!

...