I have a JSF-Spring integrated application. Spring security is also integrated in this application. These are the versions in my application:
- JSF 2.2
- Spring 4.0.3.RELEASE
- Spring Security 3.2.4.RELEASE
As per the JSF doc all the POST request in JSF2.x [or even old versions] will be CSRF protected. However I am able to penetrate my application with CSRF attack.
I tried a different JSF2.2 only [no Spring] example application, in that case I can see this example application is CSRF protected.
So my understanding is, the JSF/Spring /Spring security combination is giving issue in my original application. Unfortunately there is no helping info from the log files.
I can try with the Spring Security CSRF protection. In that case the challenge is I need to edit the code in all POST cases.
I am looking to enable JSF CSRF protection to avoid this code change. Any suggestion?
I am doing my testing with Pinata.
Tested with Spring 4.3.7 and Spring Security 4.2.2.
You need to add a CSRF token to every
formin your application. Any PATCH, POST, PUT and DELETE will be protected by Spring security (for the basic verbs). To avoid inserting a hidden input in every form manually you can create a FormRenderer on top of the provided one :Then register it to override the FormRenderer by setting it in
faces-config.xml:Also don't forget to enable CSRF in your spring context :
For your AJAX calls, you will also need to add this token in the data of any protected HTTP Verb. You can retrieve the token directly from the DOM.