Wildcard-CORS mit allowcredentials wahr
Habe ich ein Projekt wo ich mich mit wildcard-subdomains wie user.mysite.com
wo username ist ein Platzhalter.
In meinem server (PHP) ich habe den folgenden überschriften:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
Dies ermöglicht es mir zu tun, ajax-Aufrufe vom frontend da ich nicht weiß, was die domain ist zu sein. Aber ich brauche auch meine cookies werden gesendet, mit der Anforderungen für die Aufrechterhaltung der Sitzungen, aber wenn ich sage AngularJS auf meinem frontend zum senden der Anmeldeinformationen, bekomme ich folgende Meldung:
A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true
Ich verstehen, ist dies aus Gründen der Sicherheit, aber ich habe jetzt keine Möglichkeit, session-management in meiner app. Kann jemand empfehlen, eine Abhilfe für dieses?
Wo ich sage Winkel zum senden von Anmeldeinformationen:
$httpProvider.defaults.withCredentials = true;
Meine ajax-Anfragen gesendet werden um eine andere subdomain. ie die url kann billy.mysite.com
aber die ajax-Anfragen gesendet werden, um api.mysite.com
.
- Nur das abrufen der host, der aktuellen Anforderung und nutzen, dass anstelle der Platzhalter
- Warum habe ich nicht daran gedacht?! Danke @PeeHaa
Du musst angemeldet sein, um einen Kommentar abzugeben.
@iamjonesy - Sie getan haben dumme Fehler.
Zur Vermeidung der oben genannten Fehler-Folgen Sie einfach den Schritten.
Angenommen, Ihre api-server ist http://api.com . Und Ihre UI-server, von wo aus Sie die Ausführung von ajax-call, ist http://ui.com
PHP-header-code sollte wie,
Setzen Sie die folgende Zeile in eckige config.js
Was ich getan habe, niemals "*" als wilden Charakter zu $httpProvider.Standardwerte.withCredentials,nur erwähnen vollständigen domain-Namen, von wo aus der ajax-code befinden.
Nodejs
zuPeeHaa korrekt in die Kommentare:
Ist, etwas zu tun:
header('Access-Control-Allow-Origin: '.$requestHeaders['Host']);
Nicht tun, ist diese Weg!
Dies ist, was Sie gefragt haben, für genau das und es das problem löst. Im Grunde das äquivalent von
header('Access-Control-Allow-Origin: *');
Jedoch, wird das eine riesige Sicherheitslücke.Dadurch wird effektiv bedeuten, dass jede Seite Ihre Benutzer werden in der Lage sein, etwas zu tun im Namen des Benutzers ohne seine Zustimmung oder bemerken, da Sie relais die
Access-Control-Allow-Origin
mit welchem host gesendet wird und erlaubt dieser host zum übertragen des ursprünglichen Benutzers cookie (wenn es so eingestellt ist im browser für Ihre API).Statt, bevor die Weiterleitung Sie sollte immer filter die Gastgeber. Implementieren Sie eine Art whitelist-Prüfung oder eine regexp-Prüfung und nur wenn es geht, relais der
Host
zuAccess-Control-Allow-Origin
.