Я читал, что платформа воспроизведения решает проблему фиксации сеанса, хешируя идентификатор сеанса с помощью ключа приложения, но предоставляет ли он какой-либо механизм предотвращения захвата сеанса, или это остается за разработчиком?
Играет! рамки имеют встроенный механизм для предотвращения захвата сеанса?
Ответ 1
Документация по игре имеет хороший раздел безопасности, поэтому вместо дублирования здесь ссылка - http://www.playframework.org/documentation/1.2.4/security.
Он охватывает
- XSS
- SQL Injection
- Безопасность сеанса
- Подделка запроса на межсайтовый запрос
Некоторые из вас должны реализовать себя, а другие - нет.
Ваш конкретный вопрос о захвате сеанса является автоматическим.
Сессия - это хэш ключа/значений, подписанный, но не зашифрованный. Что означает, что пока ваш секрет безопасен, невозможно сторонних сессий.
Ответ 2
Нет, нет встроенного способа предотвратить захват сеанса, как только вы сможете захватить файл cookie сеанса (через sniffing/man in the middle). Есть несколько способов сделать это сложнее, например:
- используя только https
- настройка application.session.httpOnly в application.conf
Один из способов сделать это сложнее: - храните ip/user-agent/resolution/other stuff или хэш этого также в сеансе. В вашем контроллере вы затем проверяете, сохраняет ли пользователь, который обращается к вашему сайту, один и тот же хэш... единственная реальная проблема - с людьми, которые используют прокси-сервер, например изменяет ip на лету из-за кластеризации.
Небольшой трюк, который вы могли бы попробовать: (работает только в последних браузерах) Когда пользователь входит в систему, сохраните некоторые вещи в локальном хранилище HTML5. Измените свои Ajax-вызовы для предоставления этой информации из локального хранилища. Если информация отсутствует/недействительна, вы можете аннулировать весь сеанс. Но вам нужно убедиться, что проверки применяются только к запросам браузеров HTML5.
надеюсь, что это немного поможет.