Предотвращение перехвата сессии в PHP

0

Я написал сценарии входа/выхода из журнала на моей веб-странице, и когда пользователь регистрируется в $_SESSION переменной $_SESSION пользовательский агент. Теперь каждый раз, когда страница загружается, я проверяю, зарегистрирован ли пользователь или нет, и если он зарегистрирован, я проверяю, изменился ли пользовательский агент или все тот же, чтобы предотвратить угон. Если он изменился, я вызываю logOut():

function logOut($conn) 
{
    $sql = "UPDATE Users SET logged='no' WHERE username='" . $_SESSION['username'] ."'";
    $conn->query($sql); 

    // Unset all session values 
    $_SESSION = array();

    // get session parameters 
    $params = session_get_cookie_params();

    // Delete the actual cookie. 
    setcookie(session_name(), '', time() - 42000, 
    $params["path"], 
    $params["domain"], 
    $params["secure"], 
    $params["httponly"]);

    // Destroy session 
  session_destroy();    
}

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

Чтобы проверить этот код, я вошел в систему с помощью Mozilla Firefox, и я скопировал значение cookie в Chrome и перезагрузил домашнюю страницу, и, как и ожидалось, я не могу войти в систему с Chrome, но если я перезагружу страницу в Mozilla, она все равно войдет в систему.

  • 0
    $_SESSION = array(); ничего не удаляет. Он только сбрасывает переменную $_SESSION .
Теги:
session

1 ответ

0

Лучше использовать функцию unset(), а вместо unset ($ _ SESSION ['username'])

Также я могу сказать, что у вас в коде есть уязвимость в sql-инъекции здесь

'$ sql = "UPDATE Users SET logged =' no 'WHERE username ='". $ _SESSION ['username']. "'"; '

потому что каждый может использовать curl, изменить переменное имя пользователя на 'или' 1 '=' 1 и ввести это в

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

$ sql = "UPDATE Users SET logged = 'no' WHERE username = '". stripslashes ($ _ SESSION ['username']). "'"; '

Ещё вопросы

Сообщество Overcoder
Наверх
Меню