Подтвердить что ты не робот

PHP заблокирован ip-адрес

Я блокирую ip-адрес.

Означает ли это, что пользователь может только войти в систему с тем же адресом ip? Или пользователь выйдет из системы и должен повторно войти в систему, чтобы получить новый сеанс?

if (isset($_SESSION['last_ip']) === false) {
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
}

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();  
}
4b9b3361

Ответ 1

Этот код удалит сеанс (выход из системы), если изменяется IP-адрес пользователя.

Таким образом, пользователь может войти в систему с любого IP-адреса, но будет отключен, если он изменится.

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

Ответ 2

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

Я также очень рекомендую Криса Шифлетта. Его статью о захвате сессии можно найти здесь:

http://shiflett.org/articles/session-hijacking

Ответ 3

if (isset($_SESSION['last_ip']) === false) {
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
}

Выше кода означает, что сеанс "last_ip" еще не создан, он будет создан и сохраняет значения текущего пользователя ip.

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();  
}

Выше кода указывает, что если значение сеанса "last_ip" не равно вашему текущему ip, оно освободит все переменные сеанса (session_unset) и уничтожит все данные, зарегистрированные в сеансе (session_destroy).

Описать реальный сценарий.

например. Я сначала обращаюсь к вашему сайту блок кода хранит мой текущий ip. Теперь мой интернет отключился и я снова подключился к моему isp, который активировал dhcp и дает новый ip меня. Поэтому, если вы снова посетите свой веб-сайт, второй блок кода проверяет, что у меня есть другой IP-адрес, поэтому он выйдет из системы.

Также отредактируйте свой второй блок кода так, чтобы, если сеанс "last_ip" еще не создан, он не будет уведомлять php.

if (isset($_SESSION['last_ip']) && $_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();  
}