Search code examples
ajaxformssecurityxmlhttprequestcsrf

Is a CSRF token needed for "AJAX"-only "application/json"-only POSTs?


If I understand correctly, there's no need for a CSRF token if you're only allowing JSON as application/json from an "AJAX" (really AJAJ for JSON) form, right?

If someone tries to post to the form from another page using some nifty POST-to-iFrame hack it will be application/x-www-form-urlencoded, you can throw it out immediately.

If someone tries to post to the form using AJAJ, it will only succeed if OPTIONS has the CORS headers that allow it.

Conclusion: unless you're using CORS you're safe from CSRF as when you're using application/json instead of application/x-www-form-urlencoded.

Any contradictions I'm not considering?


Solution

  • Have a look at this Sec.SE question and answer. In short: you are correct (presently), but it's probably not a good idea to rely on this behavior, so use tokens anyway.