Sono confuso. Vedo che JSF 2.0 è dotato di protezione implicita CSRF: How JSF 2.0 prevents CSRF
Questa protezione implicita è solo su richieste POST (pagine ossia con <h:form>
).
D'altra parte, secondo l'articolo http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JSF-CSRF-Demo/JSF2.2CsrfDemo.html dobbiamo aggiungere il seguente elemento al file faces-config.xml
con l'elenco delle pagine JSF.
<protected-views>
<url-pattern>/csrf_protected_page.xhtml</url-pattern>
</protected-views>
Questa protezione sarà anche efficace su richieste GET (pagine ossia con <f:viewAction>
, che è anche novità dal JSF 2.2). Ogni volta che si utilizza <h:link>
o <h:button>
per creare collegamenti/pulsanti GET su tali pagine, un nuovo parametro di richiesta GET javax.faces.Token
con un valore di token generato automaticamente verrà aggiunto all'URL nell'output HTML generato e questo parametro sarà richiesto quando la pagina in questione è dichiarato in <protected-views>
.
caso <protected-views>
essere utilizzati per JSF 2.2 la protezione CSRF?
Solo su pagine con <f:viewAction>
che vorresti CSRF-protezione. Quelle con <h:form>
sono già protette implicitamente dal campo di input nascosto javax.faces.ViewState
, a condizione che non sia stato disattivato lo stato di visualizzazione JSF di <f:view transient="true">
. Vedi anche a.o. CSRF, XSS and SQL Injection attack prevention in JSF.
Quando/perché le pagine con '' devono essere protette (su richieste GET) contro CSRF? –
Tiny
@Tiny: Anche me lo chiedo. Le richieste GET sono idempotenti per definizione. Vedi anche a.o. https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Disclosure_of_Token_in_URL – BalusC