Ответ 1
Я смущен. Я вижу, что JSF 2.0 имеет скрытую защиту CSRF: Как JSF 2.0 предотвращает CSRF
Эта неявная защита распространяется только на запросы POST (т.е. страницы с <h:form>
).
С другой стороны в соответствии со статьей http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JSF-CSRF-Demo/JSF2.2CsrfDemo.html мы должны добавить следующий элемент в файл
faces-config.xml
со списком Страницы JSF.<protected-views> <url-pattern>/csrf_protected_page.xhtml</url-pattern> </protected-views>
Эта защита также будет эффективной для запросов GET (например, страниц с <f:viewAction>
, что также является новым с JSF 2.2). Всякий раз, когда вы используете <h:link>
или <h:button>
для создания ссылок GET/кнопок на эти страницы, новый URL-адрес запроса GET javax.faces.Token
с автогенерированным значением токена будет добавлен к URL-адресу в сгенерированном выходном HTML файле, и этот параметр будет требуется, когда указанная страница объявлена в <protected-views>
.
Должен ли
<protected-views>
использоваться для защиты JSF 2.2 CSRF?
Только на страницах с <f:viewAction>
, которые вы хотели бы защитить CSRF. Те, у кого <h:form>
, уже неявно защищены скрытым полем ввода javax.faces.ViewState
при условии, что вы не отключили состояние просмотра JSF на <f:view transient="true">
. См. Также a.o. Предотвращение внедрения CSRF, XSS и SQL Injection в JSF.