Сессия, куки и идентификаторы - PullRequest
1 голос
/ 22 января 2011

Мне было предложено использовать сеансы для межстраничного хранения и поддерживать идентификатор сеанса, сохраняя его в параметре GET или cookie.

Какой самый безопасный способ сохранить данные в сеансе и сделать их вечными (например, данные для входа)?

Ответы [ 4 ]

1 голос
/ 22 января 2011

Основное различие между cookie-файлом и сеансом состоит в том, что данные сеанса хранятся на стороне сервера, а данные cookie-файла хранятся на стороне клиента. Но поскольку отправка конфиденциальных данных между сервером и клиентом подразумевает значительные проблемы с безопасностью (подделка данных, прослушивание и т. Д.), Данные лучше хранить на стороне сервера.

Но чтобы связать клиента с сеансом, вам нужен какой-то идентификатор. Вот где вводится идентификатор сессии. Поскольку HTTP является без сохранения состояния (то есть каждый запрос является независимой транзакцией, не связанной с каким-либо предыдущим запросом), не существует собственного способа идентифицировать клиента только по его запросам.

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

Но теперь, когда идентификатор сеанса является единственной информацией, которая связывает клиента с сеансом, именно идентификатор сеанса стал своего рода конфиденциальными данными, которые необходимо защищать. Здесь вам понадобится аутентификация и управление сеансом , чтобы избежать атак на сеанс.

1 голос
/ 22 января 2011

Сессии являются стандартной функцией в PHP. Начните с этой страницы , чтобы прочитать некоторые подробности о том, как сеансы обрабатываются в PHP. В любом случае, имейте в виду, что даже сессия не на 100% безопасна. Существует ряд проблем с безопасностью даже в отношении сессий (вы можете прочитать что-нибудь о безопасности сеанса , фиксации сеанса , отравлении сеанса , чтобы понять последствия для безопасности сеансов) .

1 голос
/ 22 января 2011

Не уверен, что я полностью понимаю ваш вопрос, но вы можете смешивать две вещи.Параметр sid GET используется в качестве резервного идентификатора сеанса, когда файлы cookie отключены.И параметр GET, и файл cookie выполняют одно и то же, но сохранение идентификатора сеанса в файле cookie не загромождает URL-адрес, поэтому этот способ предпочтителен.

При сохранении данных сеанса с использованием $_SESSION в PHP данные хранятся только внутри.Он не передается в браузер пользователя.Только файл cookie (или sid), содержащий идентификатор сеанса, когда-либо покидает сервер.

0 голосов
/ 22 января 2011

Представьте себе сообщество, пользователи публикуют ссылки и внешние изображения.

Чтобы сохранить сеанс, страница использует GET вместо куки.

Итак: пользователь просматривает внешнее изображение или нажимает на внешнюю ссылку. Владелец внешнего ресурса теперь сможет читать REFERER, и таким образом он может видеть идентификатор сеанса и перехватывать сеанс.

Именно поэтому большинство сообществ и похожих страниц размещают прокси между страницей и внешним ресурсом, они удаляют SESSION-ID, если он хранится через GET.

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