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