Ich habe eine einfache Autoload-Funktion erstellt, die Inhalte lädt, wenn Sie auf einer Website nach unten scrollen. Es scheint jedoch ein paar Probleme zu geben, wenn ich CSRF-Schutz in Codeigniter aktivieren.
Ich verwende kein Formular, daher weiß ich nicht, wie ich das Token von A nach B senden kann, wenn ich beim Scrollen meine Post-Anfrage mache.
Mein JavaScript
%Vor%Da Codeigniter bei allen POST-Anfragen ein TOKEN erwartet, kann ich dies nicht ausführen, wenn CSRF aktiviert ist. Irgendwelche Vorschläge?
Fehler, wenn CSRF aktiviert ist
Laden der Ressource fehlgeschlagen: Der Server hat mit dem Status 500 (Interner Serverfehler)
geantwortet
Wenn ich CSRF ausschalte, funktioniert alles super ...
Wie andere sagen - Sie müssen den CSFR-Token-Namen und seinen Wert mit den AJAX-Anforderungsparametern posten. Hier ist eine einfache Lösung, um es automatisch an jede AJAX-Anfrage anzuhängen.
Hier ist, was ich auf meine Hauptansicht gesetzt habe, also ist dieser Code auf jeder Seite vor dem Laden der anderen Javascript-Dateien:
%Vor%Und hier ist ein Teil einer JavaScript-Datei, die ich auf jeder Seite einschließe:
%Vor%Vielleicht möchten Sie diesen Code ausprobieren, den ich benutzt habe. Es funktioniert super:
%Vor%Wenn Sie möchten, können Sie sowohl den Token-Namen als auch den Hash-Code an einer geeigneten Stelle ausgeben. So etwas.
%Vor%und
%Vor%Oder Sie könnten form_open () wie gewohnt verwenden und die versteckte Eingabe verwenden, die von Ihrem Javascript generiert wird. Das Deaktivieren der CSRF-Funktionalität ist der falsche Weg.
Grundsätzlich müssen Sie den erwarteten csrf-Wert vom Cookie erhalten (standardmäßig 'ci_csrf_token' genannt) und ihn dann zusammen mit Ihren anderen Daten veröffentlichen.
Sie müssten diese Zeile ändern:
%Vor%zu:
%Vor%Muss das Cookie-Addon installieren (ich bin mir nicht wirklich sicher; ich benutze mootools). Hier finden Sie weitere Informationen: Ссылка .
Vorherige Vorschläge funktionieren großartig, aber anstatt eine Variable zu verwenden, die Sie in jedem Daten-Post anwenden können, finde ich es einfacher, die Ajax-Einstellung zu verwenden, um dieses Token automatisch auf jeden Post anzuwenden:
%Vor%(funktioniert mit jquery-1.9.1. Ich bin mir nicht sicher über andere jquery-Versionen)
Das einzige Problem mit einigen der obigen Antworten ist, dass ein csrf-Token nur für eine Anfrage gültig ist. Wenn Sie also eine Post-Anfrage über Ajax machen und die Seite nicht aktualisieren, haben Sie nicht das aktuelle csrf-Token für Ihre nächste Ajax Post Anfrage. Das ist meine Lösung:
In Ihrem CodeIgniter-Controller:
%Vor%$ data = die Daten, die an den Browser zurückgegeben werden sollen
$ csrf = neues csrf-Token, das vom Browser für die nächste Ajax-Post-Anforderung verwendet werden soll
Offensichtlich können Sie dies auf andere Weise ausgeben, aber JSON wird hauptsächlich bei Ajax-Aufrufen verwendet. Fügen Sie dieses Token auch in jede Post-Antwort ein, die für die nächste Post-Anfrage verwendet werden soll
Dann in Ihrer nächsten Ajax-Anfrage (Javascript):
%Vor% Denken Sie auch daran, wo ich csrf_token:token
replace crf_token
mit dem Namen Ihres Tokens in der Datei application / config / config.php in Zeile $config['csrf_token_name'] = 'csrf_token';
Nachdem ich meine Situation überprüft habe, glaube ich, dass es die beste Option ist, CSRF zu verwenden, aber das Token bei jedem Versuch zurückzusetzen . Andernfalls würden die zuvor geäußerten Ideen zur Wiederverwendung des Cookie-Tokens einem Angreifer ermöglichen, Daten Hunderte Male erneut zu übermitteln, wobei dasselbe Token verwendet wird, das das Objekt des Punktes besiegt.
Als solche habe ich die folgende Funktion erstellt:
%Vor%Wenn zum Beispiel ein Ajax-basiertes Anmeldeformular fehlschlägt - rufen Sie diese Funktion in Ihrem PHP und dann auf der JavaScript-Seite auf, die den Fehler empfängt (diese Lösung verwendet Jquery und eine getCookie-Funktion von w3schools) würde dann einfach aufrufen:
$('input[name="csrf_test_name"]').val(getCookie('csrf_cookie_name'));
Tags und Links javascript ajax codeigniter token