Как JSF 2.0 предотвращает CSRF

Я изучаю материал, который регулярно слышу, что при выполнении webapp в JSF 2.0 вы уже защищены от межсайтового скриптинга и - подлога. Следующий отрывок из сообщения qaru.site/info/8722/... подтверждает это:

В JSF 2.0 это было улучшено за счет использования длинного и сильного автогенерированного значения вместо довольно предсказуемого значения последовательности и, таким образом, для обеспечения надежной профилактики CSRF.

Может ли кто-нибудь предоставить дополнительную информацию об этом? Как это автогенерированное значение предотвращает CSRF? Спасибо!

Ответ 1

Как это автогенерированное значение предотвращает CSRF?

Потому что это невозможно догадаться. Таким образом, злоумышленник не может жестко закодировать его в скрытом поле в виде веб-сайта атаки (если на целевом сайте нет отверстия XSS, и, следовательно, значение может быть просто получено непосредственно средствами XSS). Если значение недействительно для JSF, то форма отправки с сайта атаки просто не будет обработана, а вместо этого сгенерирует ViewExpiredException. Обратите внимание, что злоумышленнику все равно необходимо получить идентификатор сеанса, чтобы он мог быть передан обратно через атрибут jsessionid URL, поэтому изначально "слабая" защита CSRF все равно потребует некоторого отверстия XSS для получения идентификатора сеанса.

В конце концов, у меня сложилось впечатление, что вы вообще не понимаете, что такое CSRF; ответ довольно самоочевиден, если вы понимаете, что такое CSRF. В этом случае, пожалуйста, проверьте следующий вопрос: Я подвергаюсь риску нападений CSRF в форме POST, которая не требует, чтобы пользователь вошел в систему?

Ответ 2

Следует помнить, что CSRF-защита в JSF 2.0 является неявной и действительна только для запросов POST.

В JSF 2.2 для этого будет более явная поддержка. Я кратко объяснил это здесь: http://arjan-tijms.omnifaces.org/p/jsf-22.html