Frage

Ich versuche, ein Formular mit JQuery in Symfony 1.4 einzureichen, aber der CSRF -Angriff hat jedes Mal festgestellt, dass der Fehler aufgetreten ist. Dies ist der Code, mit dem ich die Formulardaten einreiche:

$.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()
      )
});

Vermisse ich etwas?

Danke, Radu.

War es hilfreich?

Lösung

Eine Sache, die Sie betrachten sollten, ist, ob das Formular Objekt, das die Eingabe validiert, genau die gleiche Klasse ist wie die, die das Token generiert hat. Standardmäßig wird die Klasse in der Erzeugung des CSRF -Tokens verwendet.

Wenn Sie beispielsweise eine Instanz einer Unterklasse eines Formulars hatten, mit dem das Formular HTML generiert wurde, und dann eine Aktion gepostet haben, die die Class Form der Vorfahren verwendet hat, würde die Validierung höchstwahrscheinlich standardmäßig fehlschlagen.

Es ist möglich, die Token -Kreation außer Kraft zu setzen, wenn sich herausstellt, dass dies Ihr Problem ist.

Haben Sie auch überprüft, ob der Wert des Token -Feldes tatsächlich ein Token enthält? Eine Konsole.log () kann Ihnen helfen, dies zu entdecken.

Ähm ... wenn ich Ihren Code genauer anschaue, ist eine andere Sache, die Sie ansehen sollten, dass Sie eine Abfragebarstellung erstellen, die in "Daten" weitergegeben wird. Haben Sie stattdessen versucht, ein echtes JSON-Objekt zu bestehen?

Andere Tipps

Übliche Ursache ist, dass der Browser keine Kekse akzeptiert - haben Sie überprüft, ob die Cookies wie erwartet zurückgegeben werden (z. B. IEHTTPHEADERS, Wireshark, Tamperdata)?

Haben Sie das Geheimnis in Settings.yml konfiguriert?

C.

Dieses kleine Problem hat mich in der Vergangenheit verrückt gemacht.

Wenn es für Sie akzeptabel ist, den CSRF -Schutz für dieses bestimmte Formular zu deaktivieren (das oft sein kann), können Sie Ihrer Formklasse in/lib/Form/... Ordner Folgendes hinzufügen:

public function configure ()

  $this->disableLocalCSRFProtection();

Ich glaube, es ist möglich, CSRF auch für eine bestimmte Instanz des Formulars zu deaktivieren, wenn Sie es nicht immer deaktivieren möchten, aber ich habe dies nicht ausprobiert / habe den Code nicht zur Hand.

Hat das Session Cookie es wirklich mit Ajax -Abfrage erhalten? Ihr vom Server zurückgegebener Sitzungs -Cookie sollte genau mit einer einfachen HTTP -Anfrage (z. B. der ersten Anfrage initiierende Sitzungsverwaltung) und mit XMLHTTPrequest sein, da Sie ansonsten Probleme mit CSRF haben.

$ ('#activity__csrf_token'). val ()

Wollten Sie in dieser Element -ID einen doppelten Unterstrich in dieser Element -ID haben?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top