Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is Safari causing a Rails CSRF exception where Chrome isn't?

I want to create sessions in my Rails 4 application via an AJAX request in an iframe.

In the iframe I've included a form for a new session with the attribute remote: true as usual, and included <%= token_tag %> in the form body as well as <%= csrf_meta_tags %> in the head of the layout.

Chrome has no problem posting this form and creating a session. Under identical conditions Safari causes a CSRF exception.

Why does this happen, and what can I do to stop it? As I understand it, this is not a situation where CSRF is essential, as there is no session to hijack, but I'm still wary of turning it off.

Chrome version: 31.0.1650.63

Safari version: 7.0.1

like image 653
djb Avatar asked Jan 09 '14 23:01

djb


People also ask

How do I enable CSRF cookies in Safari?

Safari. Open Safari Preferences from the drop-down menu in the navigation bar or by typing Cmd + , (⌘,). Click the Privacy tab and make sure that "Cookies and website data" is set to either "Always allow" or "Allow from websites I visit".

What is CSRF in rails?

Briefly, Cross-Site Request Forgery (CSRF) is an attack that allows a malicious user to spoof legitimate requests to your server, masquerading as an authenticated user. Rails protects against this kind of attack by generating unique tokens and validating their authenticity with each submission.

Where does rails store CSRF token?

Rails CSRF Token The server generates these tokens, links them to the user session, and stores them in the database. This token is then injected into any form presented to the client as a hidden field. When the client correctly submits the form for validation, it passes the token back to the server.


1 Answers

It seems this is the famous 'third party cookies' problem. Safari disables them by default.

More: How do Third-Party "tracking cookies" work?

like image 138
djb Avatar answered Oct 30 '22 03:10

djb