Başka bir alan adı için çerez nasıl ayarlanır?


166

Diyelim ki bir web sitem var a.comve bu sitenin belirli bir sayfası yüklendiğinde, sayfa bağlantısı diyelim, adlı başka bir site için bir çerez ayarlamayı b.comve ardından kullanıcıyı yönlendirmeyi seviyorum b.com.

Demek istediğim, yüklendiğinde a.com/linkbir çerez ayarlamak b.comve kullanıcıya yönlendirmek istiyorum b.com.

Bunu test ettim ve tarayıcı aslında çerezi aldı a.com/link, ancak yönlendirme isteğinde bu çerezi göndermedi b.com. Bu normal mi?

Diğer alan adları için çerezler ayarlayabilir miyiz?


B.com'da çerezleri ayarlamak için URL parametrelerini kullanırsanız, herkesin b.com'da herhangi bir web sitesinden herhangi bir çerez değerini zorlayabileceğini unutmayın.
Julien

2
bir çerez olan b.com bir iFrame kullanın;)
Jaquarh

Yanıtlar:


129

Başka bir alan adı için çerez ayarlayamazsınız. Buna izin vermek muazzam bir güvenlik açığı oluşturacaktır.

Çerezi ayarlamak için b.com almanız gerekir. A.com kullanıcıyı şuraya yönlendirirseb.com/setcookie.php?c=value

Setcookie betiği, çerezi ayarlamak ve b.com'daki doğru sayfaya yönlendirmek için aşağıdakileri içerebilir

<?php
    setcookie('a', $_GET['c']);
    header("Location: b.com/landingpage.php");
?>

Yine de a.com, b.com'a yönlendirirken aynı verileri başlık şeklinde ekleyebilir, değil mi? Bu neden bir güvenlik açığı vermiyor?
Kodlayıcı

3
@Coder, setcookie işlevi tarayıcıya b.com'dan bir çerez başlığı gönderilmesine neden olur. a.com, b.com'dan çerez başlığı gönderemiyor.
qbert220

evet bu çok güvensiz, ama işe yarıyor. OP a.com ve b.com'a sahipse ve çerez oldukça önemsizse, belki de iyidir.
rocketsarefast

1
cevapta işe yarasa da bunun güvensiz olduğunu fark etmeliyiz.
Roy Ling

2
Bununla birlikte, youtube hesabını youtube'da göstermek için gmail tarafından oluşturulan çerezleri okuyorsa nasıl söyleyebilirsiniz?
TAHA SULTAN TEMURI

55

Üst yanıta benzer şekilde, ancak kötü bir kullanıcı deneyimine neden olacak şekilde sayfaya yönlendirip tekrar yönlendirmek yerine A alanında bir resim ayarlayabilirsiniz.

<img src="http://www.example.com/cookie.php?val=123" style="display:none;">

Ve sonra cookie.php dosyasında example.com olan B etki alanında şu kodunuz olacaktır:

<?php
    setcookie('a', $_GET['val']);
?>

Hattip - Subin


1
nice hack ... :)
sotn

16
Bu muhtemelen çok kötü bir fikir sakının. Temel olarak, herkesin bu çerezi istediği herhangi bir değere ayarlamak için hazırlanmış bir GET isteği göndermesine izin vererek çok kasıtlı çerez korumalarını atlatıyorsunuz. O çerezle ne yaptığınızı bilmiyorum, ama umarım bir banka bakiyesi içermez.
Scott Stafford

Bir banka bakiyesi içermediğinden emin olabilirim. Ama iyi bir nokta :)
Jonathan

2
Bu durumda olduğu gibi herkes bu etki alanını kendi parametresiyle çağırabilirse, başka bir parametre ekleyerek güvenlik ekleyebilirsiniz. Verileri ve ek bir tuzu içeren bir karma oluşturun ve parametre olarak iletin. Çerez.php'nizde jetonu yeniden oluşturarak ve karşılaştırarak $ _GET ['val'] içindeki verileri doğrulayın.
Seba M

GET'i bu şekilde gönderiyorsanız AJAX'ı da kullanabilirsiniz.
user10398534

18

Muhtemelen Iframebunun için kullanabilirsiniz . Facebook muhtemelen bu tekniği kullanıyor. Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz . Stackoverflow benzer bir teknik kullanır, ancak HTML5 yerel depolamayla bu konuda daha fazlası bloglarında


1
iframe çözümüm için mükemmel çalıştı, normal bir istek gibi url'deki değerleri ekleyin ve çerez değerleriyle sunucudan yanıt verin
Joel Davis

Bunun çalışabilmesi için Access-Control-Allow-Origin'inizin doğru yapılandırılmış olması önerilir.
user10398534

6

Başka bir alan adı için çerez ayarlamak mümkün değildir.

Verileri başka bir alana geçirmek istiyorsanız, bunu url'ye kodlayabilirsiniz.

a.com  ->  b.com/redirect?info=some+info (and set cookie) -> b.com/other+page

4
URL'den oturum çerezi ayarlamak bir güvenlik riskidir. url'ler genellikle günlüğe kaydedilir ve bir saldırganın bir kullanıcı oturumunu çalmasına izin verir
Dane Macaulay

6

Yapamazsın, en azından doğrudan değil. Bu kötü bir güvenlik riski olurdu.

Bir Etki Alanı özniteliği belirtebilirsiniz , ancak belirtimde "Etki Alanı özniteliği, başlangıç ​​sunucusunu içeren çerez için bir kapsam belirtmediği sürece kullanıcı aracısı çerezleri reddeder."

Kaynak sunucu olduğu a.comve içermediği b.comiçin ayarlanamaz.

Bunun b.comyerine çerezi ayarlamanız gerekir . Bunu (örneğin) HTTP yönlendirme b.comve geri yönlendirme ile yapabilirsiniz .


Bunun eski bir yanıt olduğunu biliyorum, ama bu neden bir güvenlik riski olsun? Konsolunuzda veya bir uzantıda çerezler ayarlayabilirsiniz? Farklı bir alan adı için çerez ayarlayabilmeniz neden önemlidir?
Timberman

@Timberman - Soru JavaScript web sitesinde çalıştırma hakkındadır değil geliştirici araçları ve olmayan bir açıkça yüklü uzantısı. Bu bir güvenlik riski olacaktır, çünkü ziyaret eden herkes bu web sitesindeki tercihlerini değiştirecek evil-hack.com bir çerez ayarlayabilir their-favourite-website.com.
Quentin

Bunu anlıyorum, ama güvenlik riski nasıl? Güvenliği akıllıca yapacak bir şey olmadığından eminim?
Timberman

@Timberman - Bir saldırganın sitesi ile tamamen farklı bir site için tercihlerinizi değiştirirken bir sorun göremiyorsanız, bunu nasıl daha net bir şekilde açıklayacağımı bilmiyorum.
Quentin

Sorunu görüyorum, ama bunun bir güvenlik riski olduğunu görmüyorum. Javascript'in farklı bir alan adı için bir çerez ayarlayamaması gerektiğini kabul ediyorum, ancak bunu yapabiliyorsa nasıl bir güvenlik sorunu var?
Timberman

5

Eğer varsa a.my-company.comve b.my-company.combunun yerine sadece bir a.comve b.comsizin için bir çerez verebilir .my-company.cometki - bu kabul ve etki alanlarının her ikisine gönderilecektir.


1
.my-company.com için b.my-company.com'da bir çerez oluşturmak mümkün müdür?
mahesh kajale

1
My-company.com Herkese Açık Soneki Kara Delik Listesinde değilse, bu durumda tarayıcı çerezi ayarlamak için tüm girişimleri sessizce göz ardı eder! : '- (
Michael

5

bkz. RFC6265 :

Domain özniteliği, çerez için başlangıç ​​sunucusunu içerecek bir kapsam belirtmedikçe, kullanıcı aracısı çerezleri reddeder. Örneğin, kullanıcı aracısı foo.example.com adresinden "example.com" veya "foo.example.com" alan adı özniteliğine sahip bir çerezi kabul eder, ancak kullanıcı aracısı, Alan adı özniteliğine sahip bir çerezi kabul etmez "bar.example.com" veya "baz.foo.example.com".

NOT: Güvenlik nedeniyle, birçok kullanıcı aracısı "genel soneklere" karşılık gelen Etki Alanı özniteliklerini reddedecek şekilde yapılandırılmıştır. Örneğin, bazı kullanıcı aracıları "com" veya "co.uk" alan adı özelliklerini reddeder. (Daha fazla bilgi için Bölüm 5.3'e bakın.)

Ancak, yukarıda belirtilen görüntü / iframe ile geçici çözüm çalışır, ancak güvensizliği nedeniyle önerilmez.


1

Yapamazsınız, ama ... Her iki sayfanız da varsa ...

1) Verileri sorgu parametreleri aracılığıyla gönderebilirsiniz ( http://siteB.com/?key=value )

2) A sitesi içinde Site B'nin bir iframe'i oluşturabilir ve bir yerden başka bir yere posta mesajları gönderebilirsiniz. Site B, site B çerezlerinin sahibi olduğu için, doğru posta mesajını işleyerek ihtiyacınız olan değeri ayarlayabilecektir. (Diğer istenmeyen göndericilerin size mesaj göndermesini önlemelisiniz! Bu size ve bunun olmasını önlemek için kullanmaya karar verdiğiniz mekanizmaya bağlıdır.)


0

Bu linkte Link linkini bulacağız .

setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);

1
Bu işe yaramaz. Bkz şartname : "Alan nitelik kökenli sunucu yer alacağını kurabiye için bir kapsam belirtmediği sürece kullanıcı aracısı çerezleri reddedecektir."
Quentin

0

A'dan bir POST isteği gönderin. Gönderme istekleri yalnızca sunucu tarafındadır ve istemci tarafından erişilemez.

Sen bir POST isteği göndermek a.comiçin b.comCURL (önerilir, sunucu-) veya gizli kullanarak method="POST"formu (clientside). İkincisini seçerseniz, kullanıcının algoritmayı anlayamaması ve ona müdahale etmemesi için JavaScript'inizi gizlemek isteyebilirsiniz.

b.comÇerezleri ayarlamak için bir ağ geçidi açın :

<?php
    if (isset($_POST['data']) {
        setcookie('a', $_POST['data']);
        header("Location: b.com/landingpage");
    }
?>

Güvenliği bir adım daha ileri götürmek istiyorsanız, verileri bir şifreleme şifrelemesi kullanarak şifrelemek (açık ) ve şifresini çözmek (açık ) için her iki tarafa ( a.comve b.com) bir işlev uygulayın .a.comb.com

Kesinlikle güvenli olması gereken bir şey yapmaya çalışıyorsanız (ör. Bir giriş oturumu aktarın) oAuth'u deneyin veya https://api.cloudianos.com/docs#v2/auth adresinden ilham alın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.