Правда о сессиях

ОГЛАВЛЕНИЕ

Распространено неправильное представление, что PHP обеспечивает
определённый уровень безопасности с помощью собственных возможностей
управления сессией. PHP же, напротив, просто предоставляет удобный,
подходящий механизм, а обеспечение законченного решения является
заботой разработчика; и, как вы увидите, не существует единого метода
решения, наилучшего для всех.

Невозможность сохранения состояния

Протокол передачи гипертекста (HTTP), являющийся движущей силой web'а, — это протокол без сохранения состояния.
Связано это с тем, что в нём нет ничего, что требует от браузера
идентифицировать себя при каждом запросе, а также отсутствует постоянно
установленное соединение между браузером и web-сервером, которое сохранялось бы от страницы к странице. Когда пользователь посещает web-сайт, браузер посылает HTTP-запрос web-серверу,
который в свою очередь возвращает HTTP-ответ. Этим взаимодействие и
ограничивается, это и представляет собой завершённую HTTP-транзакцию.

Так как обмен информацией в web'е основан на HTTP, сохранение состояния в web-приложении
может быть для разработчиков очень сложной задачей. Куки — это
расширение протокола HTTP, которое было введено, чтобы помочь в
обеспечении сохраняющих состояние HTTP-транзакций, но забота о
конфиденциальности побуждает многих пользователей отключать поддержку
кук. Информация о состоянии может быть передана через URL, однако её
случайное раскрытие представляет собой серьёзную угрозу безопасности.
Фактически, сама суть сохранения состояния требует, чтобы клиент
идентифицировал себя, однако те из нас, кто задумывается о
безопасности, знают, что мы никогда не должны доверять информации,
посланной клиентом.

Несмотря на всё это, существуют изящные способы решения
проблемы сохранения состояния. Конечно, идеального решения не
существует, как и способа, который может удовлетворить нужды каждого.
Эта статья представляет некоторые способы, которые могут надёжно
обеспечить возможность сохранения состояния, а также защитить от
основанных на сессии атак, таких как ВСД {Б.С.: в оригинале — impersonation.}  — выдача себя за другого
(подделка сессии). Попутно вы изучите, как на самом деле работают куки,
что делают PHP сессии и что требуется для подделки сессии.