2017-03-02 4 views
1

Ich habe window.location.href mehrere Stellen in meinen Javascripts verwendet. Gibt es eine allgemeine Möglichkeit, allen CSRF-Token hinzuzufügen?CSRF-Token für window.location.href hinzufügen

Da die window.location ist ein Objekt und window.location.href ist eine seiner Eigenschaften, können wir es nicht außer Kraft setzen können.

Schreiben einer gemeinsamen Funktion wie unten und Routing der Instanzen wäre mehr manuell und zeitaufwendig.

addCSRFAndProceed(url); 
function addCSRFAndProceed (url) { 
    window.location.href = url + getCSRFTokenAndValue(); 
} 

Backend Code Hier ist der Code für das CSRF Cookie von meinem Backend-Einstellung.

$_COOKIE['CSRFTOKEN'] = '123456'; 

HTML-Code

<div class="redirect-button" onclick="TriggerRequest()"> 

Javascript-Code

function TriggerRequest() { 
    window.location.href="www.mysite.com/?index.php&from=desktop"; 
} 

Ich habe verschiedene Funktionen, die window.location.href verwenden und eine generische Lösung erwarten an die URL anhängen Token, weil es Seien Sie hektisch, um alle Funktionen manuell anzuhängen.

+0

Sie die csrf Token auf das Backend erzeugen sollte (vorausgesetzt, Sie sprechen nicht über node.js) und Sie könnte es in den Header setzen, wenn Sie einen "Standard" Ort haben wollen, um das Token zu bekommen. Brauchen Sie jedoch csrf für Weiterleitungen? Ist es nicht besser, es für Formulare zu verwenden? –

+0

Ich benutze plain javascript. Ich habe das CSRF-Token erstellt und im Cookie gespeichert. Ich stimme zu, dass ** es besser ist, Formulare zu verwenden und CSRF auch nicht für Weiterleitungen benötigt wird **. Aber leider hat meine Backend-Logik, um das CSRF-Token zu überprüfen, nicht mehr Intelligenz, um verschiedene Arten von Anfragen zu trennen und endete damit, vom Frontend zu reparieren. – Barath

+0

aber wie schützen clientseitig generierte csrf-Token Sie? * "Vertraue niemals dem Client" * –

Antwort

0

mich von einem Laravel als Backend Situation sprechen lassen (nur 1 Zeile relevant in meinem Beispiel, weil das Token von irgendwoher kommen muss)

<meta id="csrf" name="csrf-token" content="{{ csrf_token() }}"> 

ausgeben würde ein csrf Token in einem Meta-Tag mit die id csrf richtig?

Nun Verwendung und Änderung Ihrer Redirect Code funktionieren würde wie:

addCSRFAndProceed(url); 
function addCSRFAndProceed (url) { 
    window.location.href = url + '?token=' + getCSRFTokenAndValue(); 
} 

function getCSRFTokenAndValue() { 
    return document.getElementById("csrf").getAttribute('content'); 
} 

Sie sollten auch Code für Ihre Backend schreiben, der die Query-String-Parameter token prüft und erst dann die aufgerufene Seite zurück. (Serverseitige Validierung)

Pseudo-Code (noch nicht wissen, Backend)

if ($query_string_array['token'] == 'accepted token') { 
    return view:page; 
} else { 
    return error: token does not match; 
} 
+0

Ich bin sicher, das wird funktionieren, aber ich muss viele Orte umleiten, um 'addCSRFAndProceed()' zu verwenden. Gibt es eine andere generische und dynamische Art, etwas wie 'window.location.href = window.location.href + getCSRFTokenAndValue()'? – Barath

+0

Verwenden eines Ajax-Anrufs? Auf diese Weise erhältst du mehrere –

Verwandte Themen