Должны ли <protected-views> использоваться для защиты JSF 2.2 CSRF?

Я смущен. Я вижу, что JSF 2.0 имеет скрытую защиту CSRF: Как JSF 2.0 предотвращает CSRF

С другой стороны в соответствии со статьей 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>

Должен ли <protected-views> использоваться для защиты JSF 2.2 CSRF?

Ответы

Ответ 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.