Angenommen, ich habe eine Website mit dem Namen " a.com
Wenn eine bestimmte Seite dieser Website geladen wird, z. B." Seitenlink ", möchte ich ein Cookie für eine andere Website mit dem Namen" Site "setzen b.com
und den Benutzer dann zu weiterleiten b.com
.
Ich meine, beim Laden a.com/link
möchte ich ein Cookie setzen b.com
und den Benutzer an weiterleiten b.com
.
Ich habe es getestet und der Browser hat das Cookie tatsächlich von erhalten a.com/link
, aber es hat dieses Cookie bei der Umleitungsanforderung nicht an gesendet b.com
. Es ist normal?
Können wir Cookies für andere Domains setzen?
javascript
cookies
redirect
Rasoul Zabihi
quelle
quelle
Antworten:
Sie können keine Cookies für eine andere Domain setzen. Dies zuzulassen würde eine enorme Sicherheitslücke darstellen.
Sie benötigen b.com, um das Cookie zu setzen. Wenn a.com den Benutzer umleitet
b.com/setcookie.php?c=value
Das setcookie-Skript kann Folgendes enthalten, um das Cookie zu setzen und auf die richtige Seite auf b.com umzuleiten
<?php setcookie('a', $_GET['c']); header("Location: b.com/landingpage.php"); ?>
quelle
Ähnlich wie bei der Top-Antwort, aber anstatt zur Seite und wieder zurück umzuleiten, was zu einer schlechten Benutzererfahrung führt, können Sie ein Bild in Domäne A festlegen.
<img src="http://www.example.com/cookie.php?val=123" style="display:none;">
Und dann haben Sie auf Domain B, die example.com in cookie.php ist, den folgenden Code:
<?php setcookie('a', $_GET['val']); ?>
Hattip nach Subin
quelle
Wahrscheinlich können Sie
Iframe
dafür verwenden. Facebook verwendet diese Technik wahrscheinlich. Mehr dazu lesen Sie hier . Stackoverflow verwendet eine ähnliche Technik, aber mit lokalem HTML5-Speicher mehr dazu in ihrem Blogquelle
Das Setzen von Cookies für eine andere Domain ist nicht möglich.
Wenn Sie Daten an eine andere Domain übergeben möchten, können Sie diese in die URL kodieren.
quelle
Sie können nicht, zumindest nicht direkt. Das wäre ein böses Sicherheitsrisiko.
Während Sie ein Domain-Attribut angeben können , die Spezifikation sagt : „Der User - Agent Cookies ablehnen wird , wenn das Domain - Attribut einen Bereich für den Cookie gibt, die die Ursprungsserver umfassen würden.“
Da der Ursprungsserver ist
a.com
und dies nicht beinhaltetb.com
, kann er nicht festgelegt werden.Sie müssten
b.com
stattdessen den Cookie setzen. Sie können dies beispielsweise über HTTP-Weiterleitungen zub.com
und zurück tun .quelle
evil-hack.com
, der ein Cookie dafür setzen könnte, seine Einstellungentheir-favourite-website.com
auf dieser Website ändern würde.Falls Sie haben
a.my-company.com
undb.my-company.com
statt nura.com
undb.com
Sie können ein Cookie für Ausgabe von.my-company.com
Domain - es wird angenommen und sowohl der Domänen gesendet werden.quelle
siehe RFC6265 :
Die oben erwähnte Problemumgehung mit image / iframe funktioniert jedoch, obwohl sie aufgrund ihrer Unsicherheit nicht empfohlen wird.
quelle
Sie können nicht, aber ... Wenn Sie beide Seiten besitzen, dann ...
1) Sie können die Daten über Abfrageparameter ( http://siteB.com/?key=value ) senden )
2) Sie können einen Iframe von Site B innerhalb von Site A erstellen und Post-Nachrichten von einem Ort zum anderen senden. Da Site B Eigentümer von Site B-Cookies ist, kann sie durch Verarbeitung der richtigen Post-Nachricht den gewünschten Wert festlegen. (Sie sollten verhindern, dass andere unerwünschte Absender Nachrichten an Sie senden. Dies liegt bei Ihnen und dem Mechanismus, den Sie verwenden, um dies zu verhindern.)
quelle
In diesem Link finden wir die Lösung Link .
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);
quelle
Senden einer POST-Anfrage von A. Post-Anfragen befinden sich nur auf der Serverseite und können vom Client nicht aufgerufen werden.
Sie können eine POST-Anfrage
a.com
anb.com
CURL (empfohlen, serverseitig) oder eine versteckte sendenmethod="POST"
Formular (clientseitig) senden. Wenn Sie sich für Letzteres entscheiden, möchten Sie möglicherweise Ihr JavaScript verschleiern, damit der Benutzer den Algorithmus nicht verstehen und ihn nicht stören kann.Erstellen Sie ein Gateway
b.com
zum Setzen von Cookies:<?php if (isset($_POST['data']) { setcookie('a', $_POST['data']); header("Location: b.com/landingpage"); } ?>
Wenn Sie die Sicherheit noch weiter verbessern möchten, implementieren Sie auf beiden Seiten (
a.com
undb.com
) eine Funktion zum Verschlüsseln (Eina.com
) und Entschlüsseln (Einb.com
) von Daten mithilfe einer kryptografischen Chiffre.Wenn Sie versuchen, etwas zu tun, das absolut sicher sein muss (z. B. eine Anmeldesitzung übertragen), versuchen Sie es mit oAuth oder lassen Sie sich von https://api.cloudianos.com/docs#v2/auth inspirieren
quelle
Folgendes habe ich verwendet. Beachten Sie, dass dieses Cookie offen (http) übergeben wird und daher unsicher ist. Ich benutze es nicht für etwas, das Sicherheit erfordert.
Sie könnten wahrscheinlich Verschlüsselung / Signaturen hinzufügen, um dies sicher zu machen. Recherchiere, wie das richtig geht.
quelle