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();
}
788   3  
PHP

3 ответов:

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

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

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

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

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

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

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. Теперь мой интернет отключился и я снова подключаюсь к своему провайдеру, который имеет dhcp включен и дает новый ip-адрес мне. Поэтому, если вы снова посетите свой сайт, второй блок кода проверяет, что у меня другой IP, поэтому он будет выходить из системы.

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

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

Comments

    Ничего не найдено.