Как предотвратить CSRF в игре [2.0] Использование Scala?
Многие веб-фреймворки имеют стандартную настройку для создания форм с помощью токенов auth.
Должен ли я создавать такие меры вручную или проигрывать со сборкой в средствах превентивного CSRF?
Документация на Play website, похоже, не затрагивает этого.
Ответы
Ответ 1
Я использую модуль play2-authenticitytoken:
Идентификатор аутентичности - это один из самых серьезных угроз интернет-безопасности: атаки CRSF. Он гарантирует, что клиент, отправляющий форму, получит тот, кто получил страницу (а не хакер, который украл ваши данные сеанса).
Как это работает:
В двух словах:
- в каждом сообщении формы добавим скрытый параметр, содержащий uuid
- uuid подписан и его подпись хранится в сеансе (который переводится в файл cookie)
Когда пользователь отправляет форму, мы получаем: uuid, подпись и другие входы формы.
- Мы снова подпишем входящий uuid
- Проверка выполняется, если соответствие подписи (session.sign = uuid.sign)
Если злоумышленник вводит другой идентификатор, он никогда не сможет понять, как создать правильную подпись.
Ответ 2
Для полноты я приведу пример в Scala для Play 2.0
Этот метод также использует подход cookie + скрытого поля.
Пример использования
Используйте действие SessionKey
, чтобы помочь подписать форму:
object Application extends Controller {
def login = SessionKey{ (key,signature) =>
Action { implicit request =>
Ok( views.html.login(signature) ).withSession( key->signature )
}
}
}
Когда для синтаксического анализа используются следующие проверки, выполните следующие действия:
object Authenticator extends Controller {
def login = ValidateForm{
Action { implicit request =>
Ok( views.html.index("You're Loggd In") )
}
}
}
Ответ 3
Так как Play 2.1 поддерживает это в рамках. Ник Кэрролл написал небольшую статью о том, как ее использовать:
http://nickcarroll.me/2013/02/11/protect-your-play-application-with-the-csrf-filter/