Не будет ли регенерировать_сессион_ид регенерировать идентификатор для того, кто перехватывает идентификатор сеанса? - PullRequest
1 голос
/ 05 января 2012

У меня проблемы с пониманием этого, и я думаю, что мое невежество по отношению к веб-эксплоитам виновато.Мое понимание фиксации сеанса выглядит следующим образом:

  • Хакер использует некоторый эксплойт для получения идентификатора сеанса текущего пользователя, вошедшего в систему.
  • Хакер использует идентификатор сеанса для доступа к сайту, крадусеанс и эффективный вход в систему.

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

1 Ответ

0 голосов
/ 05 января 2012

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

Например:

  1. Посетите форум, на котором XSS инъекция
  2. Используйте клики по ссылке, и она украдет сессию
  3. Пользователь понимает, что это не то, что он хотел, отжимает
  4. Сайт восстанавливает новый идентификатор сеанса, пользователь сохраняется, фиксация сеанса не происходит, поскольку украденный идентификатор сеанса, вероятно, не сразу используется сервером.

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

if(!session_id()){
    session_start();
    if(!isset($_SESSION['user_ip'])){
        $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
    }
    if($_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR']){
        exit('highjacking detected, session terminated');
    }
    session_regenerate_id();
}

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

Надеюсь, это поможет ...

...