I already worked with JWT on mobile app but I will implement it on a website for the first time for the authentication and I have a little thing I still didn't understood :
..., but if I use JWT token over HTTPS with httpOnly+secure cookies and a token lifetime of 1 month, are CSRF attacks still possible in this case ?
I see all over the web for custom token with cookie or custom token with localStorage or JWT but I didn't explicitly get the answer of httpOnly+secure cookie + JWT + HTTPS + the need of CSRF.
There's no way someone can abuse XSS and take your JWT to impersonate you. If you put your JWTs in a header, you don't need to worry about CSRF.
The answer is no - the HTTPOnly flag will not mitigate any of this. But let us concentrate on solving CSRF issue.
CSRF tokens should not be transmitted using cookies. Inserting the CSRF token in the custom HTTP request header via JavaScript is considered more secure than adding the token in the hidden field form parameter because it uses custom request headers.
Using one of the following values in the SameSite attribute of a session cookie, a website can protect itself from CSRF attack. Cookies set with SameSite : strict will disable cookies being sent to all third party websites.
If you are using JWT as an authentication token, it should be stored as a cookie marked httpOnly
and secure
, as apposed to using Local/Session Storage. As you mention, this protects against XSS attacks, where we are concerned about malicious JavaScript being injected into our page and stealing our session token.
httpOnly
cannot be read by JavaScript, so it cannot be stolen in an XSS attack.However, making the session token cookie httpOnly
and secure
still leaves you vulnerable to CSRF attacks. To see why, remember that cookies are marked with the domain from which they originated, and the browser only sends cookies that match the domain to which the request is being sent (independent of the domain of the page the request was sent from). For example, suppose I'm signed into stackoverflow.com
in one tab, and in another tab go to evil.com
. If evil.com
makes an ajax call to stackoverflow.com/delete-my-account
, my stackoverflow authentication token cookie will be sent to the stackoverflow server. Unless that endpoint is protecting against CSRF, my account will be deleted.
There are techniques for preventing CSRF attacks. I would recommend reading this OWASP page on CSRF attacks and preventions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With