Ich habe ein Problem mit den mit ajax eingereichten Formularen. Ich mache meine Formulare mit Zend Framework. Einige sind echte Formen, also füge ich ein Hash-Element hinzu. Andere sind für kleine Operationen (wie Upvote und Downvote hier), also mache ich sie mit Links.
Mein Problem ist, dass ich speziell für die kleinen Formulare (die Links) Ajax verwenden muss. Ich sehe viele Fragen, aber nicht umfassend genug, um das Problem zu lösen. Gibt es eine detaillierte Beschreibung, wie csrf token funktioniert, wenn Formulare über Ajax eingereicht werden? vorzugsweise mit Zend Framework, aber auch allgemeine PHP-Antworten werden helfen.
Für diejenigen, die zu dieser Seite kommen, ist es möglich, csrf mit ajax zu arbeiten.
Im Controller müssen Sie den Hash neu generieren, indem Sie dieses Recht vor dem Ende der Aktion hinzufügen:
$ form- & gt; hash- & gt; initCsrfToken ();
$ this- & gt; Ansicht- & gt; csrfhash = $ form- & gt; hash- & gt; getValue ();
In der js-Datei, die Sie für den Ajax verwenden, müssen Sie einen Selektor verwenden, um die Instanz des Hash zu finden, während sie erstellt wird (also für jquery:
$ (# Hash) .replaceWith (csrfhash); Wenn Sie replaceWith verwenden, werden Sie das gesamte versteckte csrf-Element einschließlich der ID und des Namens ersetzen. Aber dieser Teil sollte ziemlich einfach sein.
Tags und Links php security ajax zend-framework csrf