Я думаю, что очень важно выделить потенциальные последствия для безопасности, связанные с решениями, предоставленными до сих пор.
Я был тестером проникновения веб-приложений около 5 лет и в это время разработал множество уязвимых приложений безопасности, чтобы помочь в обучении юниоров, начинающих в области информационной безопасности.
Я только что тестировал предоставленные решения и отметил, что ни одно из них не препятствует доступу к сеансу, принадлежащему соседнему приложению. Использование разных имен идентификаторов сеанса с session_name () не мешает пользователям использовать значение этих идентификаторов. В PHP нет отдельного хранилища для каждого имени идентификатора сеанса. У меня было два приложения, которые использовали разные имена сеансов и устанавливали путь cookie для браузера. Следующие соответствующие директивы Set-Cookie были включены в ответы HTTP:
Set-Cookie: TESTONE=<value one>; path=/testone/
Set-Cookie: TESTTWO=<value two>; path=/testtwo/
Если оба приложения имели совершенно отдельных пользователей, и кто-то имел доступ только к приложению /testtwo/
, они могут иметь доступ к информации в приложении /testone/
в зависимости от способа обработки параметров сеанса. В приведенном ниже примере кода показан потенциальный разрыв данных, если предположить, что оба приложения после успешной аутентификации используют параметр $_SESSION["authenticated"]
.
<?php
session_name("TESTONE");
ini_set("session.cookie_path","/testone/");
session_start();
if ($_SESSION["authenticated"] == "yes")
echo $topsecretinfo;
?>
Чтобы получить доступ к этому $topsecretinfo
, достаточно пройти аутентификацию только в приложении /testtwo/
, взять значение их идентификатора сеанса TESTTWO
и использовать его в качестве значения идентификатора сеанса TESTONE
при отправке запросов на /testone/
приложение. Процесс поиска сеанса в PHP не распознает имя идентификатора сеанса, за исключением анализа значения соответствия. то есть значение идентификатора сеанса "agcy648dja6syd8f93" вернет один и тот же объект сеанса независимо от имени, использованного для обращения к нему.