Потоки, такие как Фиксация / перехват сеанса 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, все еще не очень полезно проверять пользовательский агент (и это, похоже, тот момент, когда он не соглашается с некоторыми, возможно, более старыми советами).