Должен ли я регенерировать_сессион_ид на каждой странице? - PullRequest
2 голосов
/ 24 августа 2011

Я пытаюсь повысить безопасность моих сеансов аутентификации пользователей. Когда пользователь входит в систему, я regenerate_session_id, но я хотел бы, чтобы ваш ответ включал, если я regenerate_session_id на каждой странице, которую я аутентифицирую, пользователь мне поможет.

аутентифицировать пользователя на каждой странице

<?php
    session_start();

    if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) {
        header("location: denied.php");
        exit();
    }
?>

Я изменил это на

session_start();

if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
    header("location: access-denied.php");
    exit();
} else {

session_regenerate_id(); }

Ответы [ 2 ]

6 голосов
/ 24 августа 2011

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

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

Кроме того, это добавляет накладные расходы.Регенерация каждого запроса, вероятно, является излишним.Вместо этого попробуйте сохранить счетчик запросов;каждые 10 запросов (или около того, произвольный выбор) заново генерируйте идентификатор.

Обязательно передайте аргумент как true - вам не нужны или не нужны старые данные сеанса (помня,все же одновременные запросы).См. ( документы ) для получения дополнительной информации.

Все это говорит о том, что этот механизм является своего рода «микро-улучшением», которое даст вам больше ложного чувства безопасности, чем фактическая безопасность.Атаки с фиксацией сеансов не очень распространены, особенно если вы уже принимаете другие меры для усиления безопасности.Ничто не может заменить, например, использование HTTPS для безопасного соединения;ничто не может заменить требования к сложности пароля.

2 голосов
/ 24 августа 2011

Это может сделать вещи более безопасными, но это также создает проблемы (например, когда пользователь открывает более одной вкладки / окна вашей страницы в своем браузере и перемещается по ним параллельно).На мой взгляд, лучше использовать куки для сессий.Тем не менее, вы можете использовать session_regenerate_id () в любом случае, так как он работает и с файлами cookie.

Кроме того, вам также следует проверить, разрешено ли пользователю посещать эту страницу.Возможно, его / ее забанили, но с вашей текущей настройкой он / она все равно сможет посещать ваши страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...