Подтвердить что ты не робот

Как предотвратить CSRF в игре [2.0] Использование Scala?

Многие веб-фреймворки имеют стандартную настройку для создания форм с помощью токенов auth.

Должен ли я создавать такие меры вручную или проигрывать со сборкой в ​​средствах превентивного CSRF?

Документация на Play website, похоже, не затрагивает этого.

4b9b3361

Ответ 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") )
        }
    }   
}