Ich erstelle einen Webdienst, der ausschließlich JSON für seine Anforderungs- und Antwortinhalte verwendet (dh keine formularcodierten Nutzdaten).
Ist ein Webdienst für CSRF-Angriffe anfällig, wenn Folgendes zutrifft?
Jede
POSTAnfrage ohne ein JSON-Objekt der obersten Ebene, z. B.,{"foo":"bar"}wird mit einer 400 abgelehnt. Beispielsweise würde einePOSTAnfrage mit dem Inhalt42somit abgelehnt.Jede
POSTAnfrage mit einem anderen Inhaltstyp alsapplication/jsonwird mit einem 400 abgelehnt. Beispielsweise würde einePOSTAnfrage mit einem Inhaltstypapplication/x-www-form-urlencodedabgelehnt.Alle GET-Anforderungen sind sicher und ändern daher keine serverseitigen Daten.
Clients werden über ein Sitzungscookie authentifiziert, das ihnen der Webdienst gibt, nachdem sie über einen POST mit JSON-Daten ein korrektes Paar aus Benutzername und Kennwort angegeben haben, z
{"username":"user@example.com", "password":"my password"}.
Nebenfrage: Sind PUTund DELETEAnfragen jemals für CSRF anfällig? Ich frage, weil es den Anschein hat, dass die meisten (alle?) Browser diese Methoden in HTML-Formularen nicht zulassen.
BEARBEITEN: Artikel 4 hinzugefügt.
BEARBEITEN: Bisher viele gute Kommentare und Antworten, aber niemand hat einen bestimmten CSRF-Angriff angeboten, für den dieser Webdienst anfällig ist.