Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSRF Validation Token: session id safe?

In asp.net I am implementing an IHttpModule to mitigate CSRF attacks. It injects into the response html a hidden form parameter with the asp.net SessionID on GETs. On POSTs it then checks to make sure that hidden parameter's value matches the current SessionID. As far as I know, the only way to get the SessionID value is from the cookie, which couldn't be read or determined by the malicious site. Is there anything I am overlooking?

like image 643
ironsam Avatar asked Feb 05 '09 22:02

ironsam


People also ask

How should CSRF tokens be validated?

How should CSRF tokens be validated? When a CSRF token is generated, it should be stored server-side within the user's session data. When a subsequent request is received that requires validation, the server-side application should verify that the request includes a token which matches the value that was stored in the user's session.

How to protect against CSRF attacks?

In such cases, the attacker can in fact just get their own anti-CSRF token and anti-CSRF cookie, set the latter on the victim's browser, and then forge requests using the former. A few much safer patterns than double-submit cookies exist. Session anti-CSRF tokens, stored server-side, are a classic solution.

What is http token validation?

When a subsequent request is received that requires validation, the server-side application should verify that the request includes a token which matches the value that was stored in the user's session. This validation must be performed regardless of the HTTP method or content type of the request.

How to enable CSRF validation in Yii?

First of all, You must change component config to enable the default Yii CSRF validation. Note: When you ebable CSRF validation and use form builder to generate a form (only post), Yii will auto generate a hidden field and put it in the form, at the same time, Yii will create a cookie with CSRF token.


1 Answers

This approach is correct. You need to make sure that all of the actions available via a GET operation are "safe" (which is best practice anyway), since you're applying your XSRF protection to POSTs only.

For extra insurance, you could use it on GETs too (by adding a URL parameter to all of your links, and checking for it in every GET request), but it's cumbersome.

If you are extra paranoid, you can choose a different random number for the alternate ID. This would protect you even if a browser incorrectly makes your session cookie accessible to some hostile Javascript on another site. When a session is created, choose another big random number and store it in your session.

like image 122
erickson Avatar answered Sep 19 '22 17:09

erickson