Wie pass entlang CSRF-token in einer AJAX-post-request für eine form?
Ich bin mit Scala Play! 2.6 Framework, aber das kann nicht das Problem sein. Ich bin mit Ihrer Javascript-routing - und es scheint zu funktionieren ok, aber es ' s Probleme. Ich habe ein Formular, welches beim Rendern erzeugt diese, mit einem CSRF-token:
<form method="post" id="myForm" action="someURL">
<input name="csrfToken" value="5965f0d244b7d32b334eff840...etc" type="hidden">
<input type="text" id="sometext">
<button type="submit"> Submit! </button>
</form>
- Und hier ist in etwa, meine AJAX:
$(document).on('submit', '#myForm', function (event) {
event.preventDefault();
var data = {
textvalue: $('#sometext').val()
}
var route = jsRoutes.controllers.DashboardController.postNewProject()
$.ajax({
url: route.url,
type: route.type,
data : JSON.stringify(data),
contentType : 'application/json',
success: function (data) { ... },
error: function (data) { ... }
})
});
Aber wenn ich diesen post, ich bin immer eine UNBERECHTIGTE Antwort von meinem Server, und meine Konsole in IntelliJ sagt mir das CSRF check fehlschlägt. Wie würde ich den pass entlang der CSRF-token in der Anfrage?
hast du jemals das gelöst?
Nicht wirklich, aber jetzt drehte ich den CSRF check... NICHT
vielleicht ist diese Frage von mir, kann helfen oder Hilfe leisten -> stackoverflow.com/questions/45017920/...
Vielen Dank - ich hatte gewesen habend, die Problem - und die form, die ich oben gepostet folgt eine ähnliche Methode durch hinzufügen
Ich habe es geschafft, es zu beheben, können Sie kommen, über dieses Problem später, wenn Sie versuchen, nach etwas mit AJAX - siehe meine Antwort unten.
Nicht wirklich, aber jetzt drehte ich den CSRF check... NICHT
vielleicht ist diese Frage von mir, kann helfen oder Hilfe leisten -> stackoverflow.com/questions/45017920/...
Vielen Dank - ich hatte gewesen habend, die Problem - und die form, die ich oben gepostet folgt eine ähnliche Methode durch hinzufügen
@CSRF.formField
(ich habe nur gezeigt, dass es nach dem Rendern, wie es an den client gesendet wird). Mein Problem jetzt ist aber, dass es nicht senden oder prüfen für Sie, wenn ich POST über einen AJAX-request.Ich habe es geschafft, es zu beheben, können Sie kommen, über dieses Problem später, wenn Sie versuchen, nach etwas mit AJAX - siehe meine Antwort unten.
InformationsquelleAutor NateH06 | 2017-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, nachdem du diese für ein paar Stunden und versuchen zu entschlüsseln, Spielen Häufig-fehlt-Kontext-Dokumentation auf der Thema, ich habe es.
So, von Ihren docs:
Und dann gibt es keinen code oder Beispiel. Dank Spielen. Sehr beschreibend. Wie auch immer, hier ist, wie:
in Ihrem
view.html.formTemplate
Sie schreiben in IntelliJ:Und dadurch wird dargestellt, wie diese bei der Auslieferung an den Kunden:
Ok, es fast geschafft, jetzt müssen wir es schaffen, unsere AJAX-call. Ich habe alle von mir in einem separaten main.js Datei, aber Sie können auch setzen Sie diese in Ihre
view.html.formTemplate
wenn Sie wollen.Mit dieser Zeile:
var token = $('input[name="csrfToken"]').attr('value')
Sie zupfen sich das CSRF-token automatisch generierte im Formular-Feld und packte Ihren Wert in eine var zu Ihr Javascript.
Andere wichtige Stück von allem, was AJAX ist hier:
Mithilfe der
$.ajaxSetup
können Sie festlegen, was in der Kopfzeile. Dies ist, was Sie haben, zu folgern aus Ihrer Dokumentation:Glück! Lassen Sie mich wissen, wenn das ist klar.
Hinweis: bei der Verwendung von lusca, verwenden Sie
X-CSRF-Token
stattCsrf-Token
.Danke! Ich ziemlich viel geschrieben, dass es Weg ist, weil ich weiß, dass ich brauchen würde, um eines Tages Referenz es wieder selbst.
Ihre Antwort ist ernsthaft anderen helfen, eine Menge! 🙂
Was, wenn Sie nicht verwenden Sie "<form method="post" id="myForm" action="someURL">" und "@Helfer.CSRF-Angriffe.formField", sondern mit "@CSRF(route.Etwas.etwas(von etwas))", wo "etwas" ist eine javascript variable, die geparsed werden soll, in "@CSRF(route.Etwas.etwas(von etwas))"? Ist das überhaupt möglich?
Wenn Sie versuchen, roll your own token mithilfe von JS, ich möchte vermeiden, mit Ihren
@CSRF
Helfer Aufruf an alle, ich bin mir nicht sicher, ob es die Parameter benötigt. Generieren Sie die HTML-Datei auf Ihren eigenen und den Wert einfügen, wie Sie sehen, passen.<input name="yourCsrfToken" value="route.Something(something) etc" type="hidden">
und ändern Sie dann die oben var:var token = $('input[name="yourCsrfToken"]').attr('value')
InformationsquelleAutor NateH06
Dank NateH06 für den header-Namen! Ich war versucht zu senden csrf-token für ein "löschen" - Taste, mit einer ajax-Funktion aufrufen, und ich saß auf den folgenden:
War ich nicht in der Lage, die online-js innerhalb der
onclick()
Veranstaltung wegen eines CSP-set auf 2.6 spielen zu.Und auf die JS-Datei:
Nachdem Sie den header-Namen als
'Csrf-Token'
den ajax-call funktioniert perfekt!InformationsquelleAutor inieto
Vom JSP
Dies ist der einfachste Weg, arbeitete für mich nach kämpfen für 3 Stunden, nur um die token von der input-hidden-Feld, wie dies und während der AJAX-request nur übergeben müssen dieses token im header wie folgt:-
Von JQuery
Von plain Javascript
Letzte AJAX-Request
});
Jetzt brauchen Sie nicht zu deaktivieren crsf Sicherheit in der web-config, und auch dies wird nicht geben Sie 405( Methode Nicht Erlaubt) Fehler auf der Konsole.
Hoffen, dies wird den Menschen helfen..!!
InformationsquelleAutor MOnkey
Können Sie hinzufügen
Csrf-Token
header mitheaders
option.InformationsquelleAutor Aha00a
Wie gesagt in der Play Framework 2.6-Dokumentation, Sie können einen '
Csrf-Token
" - Header mit dem token generiert Spielen:Innerhalb eines Scala-Vorlage, die Sie bekommen können das token-Wert mit
@helper.CSRF.getToken.value
Folgenden jQuerys Dokumentation Sie können entweder einmal für alle Ajax-Anfragen durch die Konfiguration von jQuery mit ajaxSetup
oder alternativ den Header bei jeder Anfrage durch die Konfiguration der
headers
Objekt wie folgt:InformationsquelleAutor bmenzel