CSRF-Angriff erkannt, wenn die übermittlung von Daten mit ajax
Ich versuche, ein Formular Absenden mit Hilfe von jquery in symfony 1.4, aber CSRF attack detected Fehlermeldung erscheint jedes mal. Dies ist der code, den ich verwenden, um das Formular abschicken Daten:
$.ajax({
type: 'post',
cache: false,
url: $('#assign-form form').attr('action'),
data: (
'activity[id]=' + $('#activity_id').val() +
'&activity[_csrf_token]=' + $('#activity__csrf_token').val() +
'&activity[assigned_to_user_id]=' + $('#activity_assigned_to_user_id').val() +
'&activity[assigned_to_group_id]=' + $('#activity_assigned_to_group_id').val()
)
});
Bin ich etwas fehlt?
Dank,
Radu.
- Könnte fügen Sie den HTML-code Ihrer form und vielleicht die PHP soll, Griff-form?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Sache, zu betrachten ist, ob das Form-Objekt, das die Validierung der Eingabe ist genau die gleiche Klasse wie die der, erzeugt das token. Standardmäßig wird die Klasse verwendet, die in der generation des CSRF-token.
Wenn, zum Beispiel, musste man eine Instanz einer Unterklasse von einem Formular zum generieren der html-Formular und Sie dann gepostet, um eine Aktion, die die Vorfahren der form-Klasse, die überprüfung würde wahrscheinlich nicht klappen standardmäßig.
Ist es möglich, das überschreiben der token erstellen, wenn es sich herausstellt, das ist Ihr Problem.
Außerdem haben Sie überprüft, dass der Wert des token-Feld tatsächlich enthält ein token? Eine Konsole.log() kann Ihnen helfen, entdecken Sie diese.
Ähm...da schau ich näher an deinem code, eine andere Sache, zu betrachten ist, dass Sie erstellen eine Abfrage-string zu übergeben in 'data'. Haben Sie versucht, die übergabe einer eigentlichen JSON-style-Objekt statt?
Übliche Ursache ist, dass der browser akzeptiert keine cookies - haben Sie überprüft, dass die cookies zurückgegeben, wie erwartet, (z.B. iehttpheaders, wireshark, tamperdata)?
Haben Sie die Konfiguration das Geheimnis in den Einstellungen.yml?
C.
Dieses kleine Problem hat mich angespornt, mich verrückt in der Vergangenheit.
Wenn es akzeptabel ist, um Sie zu deaktivieren CSRF-Schutz für diese bestimmte form (die es oft sein kann), können Sie fügen Sie den folgenden, um Ihre Form-Klasse in /lib/form/... Ordner:
Ich glaube, es ist möglich, deaktivieren Sie CSRF-Angriffe für eine bestimmte Instanz des Formulars als gut, wenn Sie nicht immer wollen, habe es deaktiviert, aber ich habe nicht versucht, diese /nicht haben, den code an die hand.
Funktioniert das session-cookie auch wirklich bekommen es mit ajax Abfragen ? Ihre session-cookie zurückgegeben durch server sollte genau das gleiche mit einem einfachen HTTP request (zum Beispiel die erste Anfrage initiieren session-management) und mit XMLHttpRequest, sonst bekommst du ärger mit CSRF.
$('#Aktivität__csrf_token').val()
Meinst du, die mit einem doppelten Unterstrich in diesem element-id?