One thing I forgot to mention... In my servlet controller's auth method,
when a user's login is approved, the controller redirects the browser to
another page. I noticed looking in my browser's network tab the CSRF_NONCE
token in the request URL changes value between the auth method and the
eventual destination. Is this normal? I also recall reading Tomcat is
supposed to cache the last five tokens for a given current session - the
change in token values shouldn't affect usage, correct?

On Fri, Sep 2, 2016 at 10:14 AM Joe Tseng <jts...@secure-innovations.net>
wrote:

> For my app I was *mostly* successful in securing it using Tomcat's
> CsrfPreventionFilter tool. I can land on my unsecured login.jsp page and
> get the app to still redirect based on login success.
>
> My problem is regardless of login success I'm getting a 403 error; I may
> be implementing the token check incorrectly though. When I originally read
> up on how to implement CSRF in a traditional MVC app I was under the
> impression I had to provide the token in a hidden field in a POST form. My
> initial effort was aimed at providing that value from the session's
> CSRF_NONCE attribute but that kept on coming up null or of type lrucache.
>
> Other posts said all I had to do was pass my unaltered POST form action
> URL through HttpServletResponse.encodeRedirectURL() and the resulting
> CSRF_NONCE GET value would be automagically be handled by the filter (e.g.
> https://help.hana.ondemand.com/help/e5be9994bb571014b575a785961062db.html).
> Now I can produce CSRF_NONCE values all day long and be redirected to
> action page, but that page is producing a 403. I put a print statement in
> my action page, but my browser isn't getting that far, leading me to think
> I need to do something additional in my filter configuration.
>
> As an aside, I currently use a custom class that extends
> org.apache.catalina.filters.CsrfPreventionFilter so I can override
> doFilter() and filter out any checks to CSS or JS files. That works for
> excluding unsecured content but is that the right approach? Is that causing
> my main issue?
>
> My web.xml is currently as follows:
>
>      <filter>
>       <filter-name>CSRF</filter-name>
>       <filter-class>filter.CustomCSRFFilter</filter-class>
>       <init-param>
>        <param-name>entryPoints</param-name>
>        <param-value>/,/login.jsp,/JS/MIST.js</param-value>
>       </init-param>
>      </filter>
>      <filter-mapping>
>       <filter-name>CSRF</filter-name>
>       <url-pattern>/*</url-pattern>
>      </filter-mapping>
>
> Appreciative of any useful assistance...
>
>  - Joe
>
>

Reply via email to