GET / HTTP/1.1 Host: example.org User-Agent: Mozilla/5.0 Gecko Accept: text/xml, image/png, image/jpeg, image/gif, */* Cookie: PHPSESSID=1234И тут же приходит похожий запрос от другого пользователя в таком виде:
GET / HTTP/1.1 Host: example.org User-Agent: Mozilla Compatible (MSIE) Accept: text/xml, image/png, image/jpeg, image/gif, */* Cookie: PHPSESSID=1234Здесь видно, что куки одни и те же у обоих запросов, но пользователи, скорее всего разные. Ведь браузер не станет сам менять User-Agent между двумя запросами. Что бы разобраться в этом, нужно провести дополнительную процедуру проверки:
< ?php session_start(); if (isset($_SESSION['HTTP_USER_AGENT'])) { if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { /* Prompt for password */ exit; } } else { $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); } ?>Хакеру теперь нужно будет узнать не только правильный идентификатор сессии, но и нужный User-Agent пользователя, что создает дополнительные затруднения для него. Хотя при большой напористости хакер может направить пользователя на подконтрольный ему сайт для получения User-Agent, а его куки получить, эксплуатируя уязвимости браузера, в особенности если это IE. Продолжаем усложнять взлом, используя MD5-шифрование, для заголовка User-Agent при каждом запросе. Что бы было труднее расшифровать, в маркер следует добавить случайную строку, это еще больше его запутает и продлит процедуру идентификации.
< ?php $string = $_SERVER['HTTP_USER_AGENT']; $string .= 'SHIFLETT'; /* Add any other data that is consistent */ $fingerprint = md5($string); ?>Если такой маркер будет находиться во всех URL, и будет просто необходим для продолжения сессии наравне с самим идентификатором сессии, это повысит на порядок безопасность. Так же можно продумать механизм запроса дополнительной аутентификации при неудачной проверке. Подозреваемые пользователи должны будут вводить пароль, если в механизме их сессии обнаружены какие-то ошибки. Обычно этого не происходит, и легальным пользователям это не доставит особых проблем и трудностей. Наоборот, скорее всего они даже оценят высокий уровень безопасности. А вот злоумышленники, наоборот будут сильно раздосадованы и скорее всего, откажутся от взлома.