Załóżmy, że mam wywoływaną witrynę internetową a.com
, a kiedy ładuje się konkretna strona tej witryny, powiedzmy łącze do strony, chcę ustawić plik cookie dla innej witryny o nazwie b.com
, a następnie przekierować użytkownika do b.com
.
Chodzi mi o to, że po załadowaniu a.com/link
chcę ustawić plik cookie dla b.com
i przekierować użytkownika do b.com
.
Przetestowałem to i przeglądarka faktycznie otrzymała plik cookie od a.com/link
, ale nie wysłała go w żądaniu przekierowania do b.com
. Jest to normalne?
Czy możemy ustawić pliki cookie dla innych domen?
javascript
cookies
redirect
Rasoul Zabihi
źródło
źródło
Odpowiedzi:
Nie możesz ustawić plików cookie dla innej domeny. Zezwolenie na to stanowiłoby ogromną lukę w zabezpieczeniach.
Aby ustawić plik cookie, musisz pobrać b.com. Jeśli a.com przekierowuje użytkownika do
b.com/setcookie.php?c=value
Skrypt setcookie może zawierać następujące elementy służące do ustawienia pliku cookie i przekierowania do właściwej strony w witrynie b.com
źródło
Podobnie jak w przypadku pierwszej odpowiedzi, ale zamiast przekierowywania na stronę iz powrotem, co spowoduje złe wrażenia użytkownika, możesz ustawić obraz w domenie A.
Następnie w domenie B, czyli example.com w pliku cookie.php, będziesz mieć następujący kod:
Hattip do Subin
źródło
Prawdopodobnie możesz
Iframe
do tego użyć . Facebook prawdopodobnie używa tej techniki. Możesz przeczytać więcej na ten temat tutaj . Stackoverflow używa podobnej techniki, ale z lokalną pamięcią HTML5, więcej na ten temat na ich bloguźródło
Ustawienie plików cookie dla innej domeny nie jest możliwe.
Jeśli chcesz przekazać dane do innej domeny, możesz zakodować to w adresie URL.
źródło
Nie możesz, przynajmniej nie bezpośrednio. To byłoby paskudne zagrożenie bezpieczeństwa.
Chociaż można określić atrybut domeny , w specyfikacji jest napisane: „Klient użytkownika odrzuci pliki cookie, chyba że atrybut domeny określa zakres dla pliku cookie, który obejmowałby serwer pochodzenia”.
Ponieważ serwer pochodzenia jest
a.com
i nie obejmujeb.com
, nie można go ustawić.Zamiast tego musisz
b.com
ustawić plik cookie. Możesz to zrobić za pomocą (na przykład) przekierowań HTTP dob.com
iz powrotem.źródło
evil-hack.com
mógłby mieć ustawiony plik cookietheir-favourite-website.com
, który zmieniłby jego preferencje w tej witrynie.Jeśli masz
a.my-company.com
ib.my-company.com
zamiast tylkoa.com
ib.com
możesz wystawić plik cookie dla.my-company.com
domeny - zostanie on zaakceptowany i wysłany do obu domen.źródło
zobacz RFC6265 :
Ale wspomniane powyżej obejście z image / iframe działa, chociaż nie jest zalecane ze względu na jego niepewność.
źródło
Nie możesz, ale ... Jeśli jesteś właścicielem obu stron, to ...
1) Możesz wysłać dane za pomocą parametrów zapytania ( http://siteB.com/?key=value )
2) Możesz utworzyć ramkę iframe witryny B wewnątrz witryny A i wysyłać wiadomości pocztowe z jednego miejsca do drugiego. Ponieważ witryna B jest właścicielem plików cookie witryny B, będzie mogła ustawić dowolną potrzebną wartość, przetwarzając poprawną wiadomość pocztową. (Powinieneś uniemożliwić innym niechcianym nadawcom wysyłanie do Ciebie wiadomości! To zależy od Ciebie i mechanizmu, którego zdecydujesz się użyć, aby temu zapobiec)
źródło
W tym linku znajdziemy rozwiązanie Link .
źródło
Wyślij żądanie POST od A. Żądania pocztowe znajdują się tylko po stronie serwera i klient nie może uzyskać do nich dostępu.
Możesz wysłać żądanie POST z
a.com
do,b.com
używając CURL (zalecane, po stronie serwera) lub ukrytegomethod="POST"
formularza (po stronie klienta). Jeśli zdecydujesz się na to drugie, możesz chcieć zaciemnić swój JavaScript, aby użytkownik nie był w stanie zrozumieć algorytmu i ingerować w niego.Włącz bramę,
b.com
aby ustawić pliki cookie:Jeśli chcesz pójść o krok dalej w zakresie bezpieczeństwa, zaimplementuj po obu stronach (
a.com
ib.com
) funkcję szyfrowania (włączaniaa.com
) i deszyfrowania (włączaniab.com
) danych przy użyciu szyfru kryptograficznego.Jeśli próbujesz zrobić coś, co musi być absolutnie bezpieczne (np. Przenieść sesję logowania), wypróbuj OAuth lub zainspiruj się https://api.cloudianos.com/docs#v2/auth
źródło