Как вы защищаете XSRF от Grails?

Как защититься от атак XSRF в Grails. Я вижу, что формы поддерживают понятие useToken, которое (я думаю, должно хватить). Однако remoteForm или другой связанный с AJAX запрос не поддерживают эту функцию.

Кроме того, существует ли способ инвертировать функциональность useToken, чтобы он всегда использовался, а не включался в каждом конкретном случае?

Ответ 1

Вы можете попробовать посмотреть исходный код тега < g: form > . Он использует SynchronizerToken, чтобы создать токен и сохранить его в сеансе. Основываясь на разрешении этой проблемы, следует использовать один и тот же токен для всех форм на одной странице. Я не пробовал это, но теоретически вам просто нужно вручную создать скрытое поле в форме и сгенерировать токен в этом поле.

Ответ 2

Мы вводим скрытое значение объекту запроса в фильтр before и шифруем значение с помощью определенного ключа. Затем мы добавляем значение request.token в каждую форму на сайте, и когда мы получаем POST, у нас есть фильтр перед тем, чтобы проверить, что это скрытое поле присутствует, и его значение может быть декодировано этим же секретным ключом.

Если это скрытое значение отсутствует или если оно устарело, мы используем временную метку в качестве полезной нагрузки - мы предоставляем клиенту статус ошибки.

Это альтернативный способ описанного выше, и мы используем это, потому что мы не используем сеансы на наших сайтах, чтобы упростить загрузку баланса.