Wann kann CORS sicher aktiviert werden?
Ich bin die Entwicklung einer JSON/REST web-API, für die ich ausdrücklich, dass websites Dritter aufrufen zu können meinen service durch AJAX. Daher mein service ist das senden des berühmten CORS-header:
Access-Control-Allow-Origin: *
Die es erlaubt Drittanbieter-Websites zu nennen, die meinen Dienst durch AJAX. Alles fein so weit.
Jedoch ein Teilgebiet meiner web-api ist nicht öffentlich und erfordert eine Authentifizierung (ziemlich standard-Sachen, die mit OAuth und ein access_token cookie). Es ist sicher zu ermöglichen CORS auf diesem Teil meiner Website als gut?
Auf der einen Seite, es wäre cool, wenn websites von Dritten haben könnte, ajax-clients, die auch die Interaktion mit diesem Teil meiner Dienstleistung. Aber der Grund, dass es wird eine same-origin-policy in den ersten Platz, ist, dass dies riskant sein. Sie wollen nicht jede website, die Sie besuchen anschließend in der Lage sein, um Zugriff auf Ihre privaten Inhalte.
Dem Szenario, das ich befürchte, ist, dass ein Benutzer anmeldet auf meiner web-api, entweder auf der website oder über eine website, die er vertraut, und er vergisst auszuloggen. Dies wird erlauben, jede andere website, dass er die Ausflüge danach Zugriff auf seine privaten Inhalte, die über die bestehende session?
Also meine Fragen:
- Ist es jemals sicher zu ermöglichen CORS auf nicht-öffentliche Inhalte?
- Wenn ein CORS-fähigen server setzt session_token durch ein cookie, dieses cookie gespeichert werden unter der domain des CORS-server oder web-server-Seite?
InformationsquelleAutor der Frage Jeroen | 2012-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Antwort auf Ihre zweite Frage (Wenn ein CORS-fähigen server setzt session_token durch ein cookie,...?), der cookie gespeichert wird, unter der domain der CORS-server. Die Haupt-web-Seite der JS-code kann nicht auf die Cookies, auch über
document.cookie
. Das cookie nur an den server gesendet, wenn der.withCredentials
- Eigenschaft festgelegt ist, und selbst dann ist es nur akzeptiert, wenn der server setzt dieAccess-Control-Allow-Credentials
header.Ihre erste Frage ein wenig mehr offen. Es ist ziemlich sicher, aber es gibt Möglichkeiten, zu umgehen, Dinge. Beispielsweise könnte ein Angreifer einen DNS-poisoning-Technik führen Sie eine preflight-Anfrage zu schlagen, die eigentlichen server, sondern schicken Sie die tatsächlichen CORS Anfrage, um die Schurken-server. Hier sind einige weitere Ressourcen, die auf CORS security:
Schließlich, Ihre Sorge ist um geben alle website den Zugang zu Ihrem CORS-Daten. Zum Schutz gegen diese, sollten Sie nicht verwenden die
Access-Control-Allow-Origin: *
header. Stattdessen sollten Sie die echo-back des Benutzers Wert Herkunft. Zum Beispiel:Dieser header wird damit nur
http://www.example.com
Zugriff auf die response-Daten.InformationsquelleAutor der Antwort monsur
Die Absicht, CORS erlaubt cross-origin-requests für XHR-Anfragen, während er den server der Behörde angeben, welche Herkunft hat Zugriff auf die Ressource. Insbesondere, CORS eingeführt, die Herkunft - header-Feld, ermöglicht es dem server zu sagen, regelmäßigen und möglichst XHR-Anfragen auseinander. Dieses header-Feld kann nicht festgelegt werden, oder verändert durch den Benutzer, sondern wird durch den browser für XHR-Anfragen.
Also, wenn Sie haben eine API, die entworfen, um nur von XHR, Sie kann (und sollte) verlangen, dass der Antrag zu entsprechen mit CORS. Vor allem, wenn die Anfragen können sich auch ändern, Stand auf Ihrem server als sonst, Sie wäre anfällig für CSRF-Angriffe.
Hinweis: die CSRF-Angriffe sind möglich, unabhängig von CORS mit anderen Methoden zu Schmieden GET-und POST-Anfragen. CORS hat nur dann aktivieren, um den Zugriff auf die server-Antwort von XHR-Anfragen mit JavaScript, wenn der server es erlaubt.
InformationsquelleAutor der Antwort Gumbo