Я не совсем уверен, как работает $_SESSION
в PHP. Я предполагаю, что это куки-файлы в браузере, сопоставленные с уникальным ключом на сервере. Можно ли подделать это и путем входа в систему, который использует сеансы только для идентификации пользователя.
Если $_SESSION
не работает, может ли кто-то потенциально подделывать файлы cookie и обходить логины?
Да.
Единственное, что идентифицирует пользователя, – это псевдослучайное значение, отправляемое вместе с каждым запросом. Если злоумышленник может угадать правильные значения для отправки, он может представлять себя как кто-то другой.
Существуют различные способы сделать это сложнее:
Сессии в PHP по умолчанию хранят данные в файле на сервере ( /tmp
/) и сохраняют файл cookie идентификатора, обычно PHPSESSID
(это будет шестнадцатеричное число, например f00f8c6e83cf2b9fe5a30878de8c3741
).
Если у вас есть чужой идентификатор, вы можете теоретически использовать свою сессию.
Тем не менее, большинство сайтов проверяют, чтобы пользовательский агент был согласован, а также регенерировал идентификатор сеанса для каждой части запросов, чтобы смягчить это.
Что касается угадывания сессии, это возможно, но крайне маловероятно. Было бы легче угадать номера кредитных карт (меньший пул символов ( 0-9
над 0-9a-f
) и контрольная сумма для его проверки). Хотя, конечно, вам также потребуется срок действия и код безопасности.
Правильно реализованные идентификаторы сеанса очень длинные и случайные, чтобы сделать предположение невозможным (хотя, если вы смогли угадать идентификатор сеанса конкретного пользователя, тогда да, вы будете действовать как этот пользователь). Однако вы можете обнюхивать и захватывать сеансы – вот что делает firesheep: http://en.wikipedia.org/wiki/Firesheep