В дополнение к ответу @Kai Sellgren (+1), в котором содержатся некоторые полезные советы о том, как обезопасить хранилище сеансов, я бы добавил несколько идей, которые могут объяснить хэш и соль в некоторых конкретных приложениях.
Я не говорю о приложении, которое использует cookie в качестве хранилища сеансов, мы все еще видим это, например, в решении Prestashop eCommerce с шифрованием содержимого cookie (почему, черт возьми, они решили сохранить сеанс в cookie?).Я понимаю, что мы говорим о хранилище сеансов на стороне сервера.
Ключевым моментом является многоуровневая безопасность и всесторонняя защита :
Соглашения никогда не бывают булевыми, а вы нет 'полностью скомпрометированы »или« полностью защищены ».Одна из реальных историй, которая мне нравится, это объяснение mySpace червя , оно показывает реальную атаку и то, как защитные шаги должны быть сломаны.Там всегда новая стена.Только один пример, когда я нахожусь в офисе, у меня один и тот же IP-адрес, что и у моего босса, и, возможно, тот же браузер, это может нарушить безопасность, основанную только на IP + user-agent.
Так что в хэшеИ соль сессионной штамповки мы явно действуем после падения нескольких стен.И Кай показывает нам некоторые из этих стен.Когда он говорит о защите хранилища сессий, я бы добавил 2 вещи:
- - это действительно хорошая идея изменить
session.save_path
и open_basedir
каждого PHP-приложения (и получить отдельный Virtualhost длякаждый).Сделано редко. - если ваше приложение установлено по пути (например, / myapp), добавьте prefix_path в файл cookie сеанса (и исправьте его для любого другого приложения на том же сервере)
Теперь давайте представим реалистичный компромисс.Существует несколько способов скомпрометировать сеанс на стороне сервера:
- Приложение работает на веб-сайте, а некоторые другие приложения работают по другим путям (или в других доменах на том же сервере).И, по крайней мере, одно из этих приложений совершенно небезопасно.В худшем случае код на стороне сервера может быть введен в это приложение, но некоторые из стен безопасности (например, open_basedir или другие методы хроматирования) могут препятствовать тому, чтобы этот внедренный код влиял на ваше отдельное приложение (или данные).
- Некоторые изБиблиотеки javascript поставляются с некоторыми тестовыми подкаталогами, содержащими крайне небезопасные сценарии, с не только приятным раскрытием сеанса, но, возможно, с некоторой доступной фиксацией или предсказанием сеанса.
- Приложение является общим и, говоря о софтах типа wordpress, вы можете представить некоторые платформыделиться множеством различных установок, с разными модулями и, возможно, с каким-то нестандартным кодом.На таких платформах вы найдете настройки, позволяющие изменять соль для каждого потребителя, для этого есть причина.Один из веб-сайтов может повлиять на безопасность других, и чистое разделение может быть сложнее, если приложения хотят управлять веб-сайтами все-в-одном.
Ваше целевое приложение может попасть в окружающую среду, если хранилище сеанса можно использовать совместно с некоторыми сценариями из другого приложения или из сценария в вашем собственном приложении, о котором вы даже не заметили (как в этих примерах f *** в библиотеках javascript, почему вы не приостановили выполнение phpв статических файловых каталогах!)
На этом первом этапе компрометации злоумышленник может потенциально (и с возрастающей степенью серьезности):
- прочитать штампы сеанса и, возможно, найти, какую информацию ему следует подделатьчтобы получить тот же штамп
- , создайте новый сеанс, содержащий штамп сеанса, действительный для его конфигурации, а затем используйте этот новый идентификатор сеанса в вашем приложении.Ваша заявка найдет файл сеанса и примет его.
- Измените один из ваших действительных сеансов, чтобы таким же образом изменить штамп
Простой хэш этой марки сделало бы его жизнь труднее, но это была бы просто стена, чтобы сломать, соль сделает эту стену действительно труднее сломать.
Одним из важных моментов, из вашего вопроса, , если парень может что-то изменить в хранилище сеансов, у меня уже плохое настроение? .Ну, может быть, не полностью.Если это единственное, что позволяет ему делать «разделение / разделение» приложений, то эта соль станет для него кошмаром.
И второй важный момент: следует ли мне делать этот уровень вглубина безопасности в каждом веб-приложении? .Ответ - нет. Overengineering - это плохо и может снизить безопасность вашего приложения, потому что его стало труднее понять и понять.Вам не нужно усложнять свое приложение, если:
- у вас довольно хороший уровень разделения хранилища сессий
- вы один на своем сервере, только одно приложение ине какая-либо обработка нескольких сайтов
- уровень безопасности вашего приложения настолько слаб, что в приложении доступно простое внедрение кода, поэтому для атакующего фиксация сеанса не требуется: -)