// Collect this information on every request
$aip = $_SERVER['REMOTE_ADDR'];
$bip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
session_start();
// Do this each time the user successfully logs in.
$_SESSION['ident'] = hash("sha256", $aip . $bip . $agent);
// Do this every time the client makes a request to the server, after authenticating
$ident = hash("sha256", $aip . $bip . $agent);
if ($ident != $_SESSION['ident'])
{
end_session();
header("Location: login.php");
// add some fancy pants GET/POST var headers for login.php, that lets you
// know in the login page to notify the user of why they're being challenged
// for login again, etc.
}
Что это значит, это «контекстная» информация о сеансе пользователя, фрагменты информации, которые не должны меняться в течение одного сеанса. Пользователь не будет одновременно на компьютере в США и в Китае, верно? Поэтому, если IP-адрес внезапно изменяется в пределах одного сеанса, что сильно подразумевает попытку захвата сеанса, поэтому вы защищаете сеанс, завершая сеанс и заставляя пользователя повторно аутентифицироваться. Это препятствует попытке взлома, злоумышленник также вынужден войти в систему вместо того, чтобы получить доступ к сеансу. Известить пользователя о попытке (ajax it it bit) и vola, Слегка раздражать + информированный пользователь и их сеанс / информацию защищены.
Мы бросаем User Agent и X-FORWARDED-FOR, чтобы сделать наш лучший способ захватить уникальность сеанса для систем, находящихся за прокси-серверами / сетями. Вы можете использовать больше информации, чем тогда, не стесняйтесь быть творческими.
Это не 100%, но это довольно эффективно.
. Вы можете сделать больше, чтобы защитить сеансы , истекает их, когда пользователь покидает веб-сайт и возвращается, чтобы заставить их снова войти в систему. Вы можете обнаружить, что пользователь ушел и вернулся, захватив пустой HTTP_REFERER (домен был введен в строке URL) или проверьте, соответствует ли значение в HTTP_REFERER вашему домену или нет (пользователь нажал внешнюю / созданную ссылку, чтобы перейти к вашему сайт).
Завершить сеансы, не позволяйте им оставаться действительными на неопределенный срок.
Не полагайтесь на файлы cookie, их можно украсть, это один из векторов атаки для сеанса угон.