Ich habe meine Ionic/angular 2 App, die auf localhost:8000
ausgeführt wird Die App wird schließlich auf der Browser-Plattform ausgeführt werden. Die App ruft eine RESTFull-API auf, die auf meinem lokalen Rechner unter https://adawy/api
gehostet wird, wobei adawy
mein Hostname ist und sowohl in der Datei hosts
als auch in virtuellen Hosts definiert ist. Die Serverseite ist Slim 3.Wie schützt man JWT gegen XSRF mit HTTPOnly Cookies?
Die API bei der Authentifizierung gibt eine JWT zurück, die mit allen Anforderungen verwendet werden soll.
Mein Ziel ist es, das Token vor Cross Site Request Forgery und Cross Site Scripting zu schützen. Das Speichern des Tokens in einer JavaScript-Variablen oder in einer beliebigen Form von lokalem Speicher würde den JWT über JavaScript zugänglich machen.
Ich fand, dass der beste Weg ist, die JWT als HTTPOnly Cookie zurückzugeben. So wird es nicht von Javascript zugänglich sein und würde nur vom Browser mit allen bevorstehenden Anfragen an adawy
Domain gesendet werden.
Ich hatte das Token erfolgreich als Cookie zurückgegeben, aber das Problem ist, dass der Cookie nicht mit den nächsten XHR-Anfragen gesendet wird.
Auch kann ich den Cookie in den Cookies Abschnitt in Devtools nicht sehen.
Ich weiß, dass Winkel in einer solchen Angelegenheit durch die Suche nach XSRF-TOKEN
Cookie unterstützen kann. Es funktioniert auch nicht, wie Sie sehen können, ich den Namen des Cookies auf XSRF-TOKEN
setzen, aber noch, mit jeder anderen Anfrage wird dieser Cookie nicht gesendet.
Ich frage mich, wie dies gesichert wäre, als ob eckig Zugriff auf diesen Cookie hat, also würde jedes andere Skript?
Hier ist die nächste Anfrage, ohne Cookie gesendet. Bitte ignorieren Sie die Kopfzeile Authorization
, da mein Winkelcode es direkt setzt.
In meinem Winkel app, ich bin Einstellung der withCredentials: true
Option, während die Anforderung letzten get machen.
Update Ich hatte adawy.com
verwendet und ich habe immer noch das gleiche Problem.
Danke für Ihre Antwort. Ich änderte die Domain zu "adawy, com" und ich habe immer noch das gleiche Problem. –
[Chrome unterstützt keine CORS-Ausnahmen für Anforderungen, die von localhost stammen] (http://stackoverflow.com/questions/10883211/deadly-cors-when-http-localhost-is-the-origin). Sieht aus wie [dieses Problem wurde im Jahr 2014 als nicht behoben] geschlossen (https://bugs.chromium.org/p/chromium/issues/detail?id=67743). Anscheinend wird 'Access-Control-Allow-Origin: *' für localhost funktionieren, so dass Sie Tests durchführen können, aber 'localhost' ist ein No-Go. – LinuxDisciple
Ich stolperte über diese Frage, das ist der Grund, warum ich 'adawy.com' als Hostname verwende. Ich denke, ich muss etwas falsch mit meinem Cookie Setup selbst haben. Aber ich bin nicht in der Lage, das herauszufinden. –