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
POST
Anfrage ohne ein JSON-Objekt der obersten Ebene, z. B.,{"foo":"bar"}
wird mit einer 400 abgelehnt. Beispielsweise würde einePOST
Anfrage mit dem Inhalt42
somit abgelehnt.Jede
POST
Anfrage mit einem anderen Inhaltstyp alsapplication/json
wird mit einem 400 abgelehnt. Beispielsweise würde einePOST
Anfrage mit einem Inhaltstypapplication/x-www-form-urlencoded
abgelehnt.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 PUT
und DELETE
Anfragen 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.