PHP Session: ID генерируется только на стороне сервера? - PullRequest
0 голосов
/ 23 октября 2019

Рассмотрим следующий PHP-скрипт:

<?php
session_start();
echo session_id();

Когда вы открываете эту страницу через браузер, вы должны увидеть идентификатор сессии , сгенерированный сервером.
Для стандартного phpПри установке .ini этот идентификатор сеанса может иметь длину 32 символа в диапазоне от 0 до 9 av (5 бит на символ). Пример:

va9o92iefqoe0ouiado99r9hr299oamc

Теперь предположим, что вы вручную изменили в браузере идентификатор сеанса cookie с va9o92iefqoe0ouiado99r9hr299oamc на z, а затем снова получили доступ к вышеуказанному сценарию:

СначалаЯ ожидал бы, что PHP должен быть достаточно умным, чтобы признать, что такой идентификатор сеанса не был сгенерирован сервером, и поэтому его следует игнорировать, а новый должен генерироваться на стороне сервера. К сожалению, этого не происходит. На самом деле, PHP просто движется вперед с z в качестве идентификатора сеанса.

Я не уверен, как злоумышленник может это использовать, но мне не нравится идея создания идентификатора сеанса на стороне клиента.

Вопрос

Я что-то упустил? Если нет, то как укрепить сессию PHP, чтобы смягчить такую ​​проблему?

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Согласно php.ini:

; Whether to use strict session mode.  
; Strict session mode does not accept an uninitialized session ID, and  
; regenerates the session ID if the browser sends an uninitialized session ID.  
; Strict mode protects applications from session fixation via a session adoption  
; vulnerability. It is disabled by default for maximum compatibility, but  
; enabling it is encouraged.  
; https://wiki.php.net/rfc/strict_sessions  
session.use_strict_mode = 0  

Также доступно в Руководстве по PHP :

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

Поэтому достаточно просто изменить на session.use_strict_mode = 1, чтобы избежать генерации идентификатора сеанса на стороне клиента.

0 голосов
/ 23 октября 2019

Вы должны вызвать session_set_cookie_params () перед session_start ()

см. https://www.php.net/manual/en/function.session-set-cookie-params.php

последний параметр $ httponly

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