Yönlendiren ve Yönlendiren Politikası ile ilgili en iyi uygulamalar

Maud Nalpas
Maud Nalpas

Bu sayfada, Yönlendiren Politikanızı ve yönlendireni kullanır.

Özet

  • Kaynaklar arası beklenmedik bilgi sızıntısı, web kullanıcılarına zarar verir gizlilik. CEVAP yönlendirenler politikası size yardımcı olabilir.
  • Yönlendiren politikası olarak strict-origin-when-cross-origin ayarlayabilirsiniz. Google hatasını azaltırken yönlendirenin kullanışlılığının büyük bir kısmını korur. kaynaklar arası veri sızıntısı.
  • Siteler Arası İstek Sahtekarlığı (CSRF) koruması için yönlendirenler kullanmayın. Tekliflerinizi otomatikleştirmek ve optimize etmek için CSRF jetonları ek bir güvenlik katmanı olarak kullanabilirsiniz.
ziyaret edin.

Yönlendiren ve Yönlendiren-Politika 101

HTTP isteklerinde isteğe bağlı bir Referer üst bilgisi bulunabilir. Bu değer, isteğin kaynak veya web sayfası URL'sini belirtir. İlgili içeriği oluşturmak için kullanılan Referrer-Policy üst bilgisi Referer başlığında hangi verilerin kullanıma sunulduğunu tanımlar.

Aşağıdaki örnekte Referer üstbilgisi, site-one sitesindeki isteğin yapıldığı sayfa.

Yönlendiren başlığı içeren HTTP isteği.
Yönlendiren başlığı içeren bir HTTP isteği.

Referer başlığı farklı istek türlerinde mevcut olabilir:

  • Navigasyon isteklerinde (kullanıcı bir bağlantıyı tıkladığında).
  • Tarayıcı; resim, iframe, komut dosyası ve gereken diğer kaynakları belirlemenize yardımcı olur.

Gezinmeler ve iframe'ler için bu verilere, aşağıdakileri kullanarak da JavaScript ile erişebilirsiniz: document.referrer

Referer değerlerinden birçok şey öğrenebilirsiniz. Örneğin, bir analiz hizmeti bu verileri, site-two.example sitesine gelen ziyaretçilerin% 50'sinin geldiğini belirlemek için kullanabilir social-network.example başlangıç fiyatıyla. Ancak yol ve sorgu dizesinin kaynaklar genelinde Referer içinde gönderilmesi kullanıcıları tehlikeye atabilir ve güvenlik riskleri yaratabilir:

Yolları olan, farklı gizlilik ve güvenlik riskleriyle eşlenmiş URL'ler.
Tam URL'nin kullanılması kullanıcı gizliliğini etkileyebilir ve güvenlik.

1 ile 5 arasındaki URL'ler gizli bilgiler içerir ve bazen bu kişisel verilerdir. Bu kaynakları kaynaklar arasında sessizce sızdırmak web kullanıcılarının gizlilik.

URL 6, bir özellik URL'sidir. Herhangi biri ancak amaçlanan kullanıcı bunu alırsa kötü niyetli bir kişi kontrolü ele geçirebilir. seçin.

Sitenizden gelen istekler için hangi yönlendiren verilerinin kullanılabileceğini kısıtlamak istiyorsanız bir yönlendiren politikası belirleyebilirsiniz.

Hangi politikalar mevcuttur ve aralarında ne gibi farklar vardır?

Sekiz politikadan birini seçebilirsiniz. Politikaya bağlı olarak, veriler Referer başlığından (ve document.referrer) kullanılabilen aşağıdaki özellikler olabilir:

  • Veri yok (Referer başlığı yok)
  • Yalnızca origin
  • Tam URL: kaynak, yol ve sorgu dizesi
ziyaret edin.
Veri analizi
    Yönlendiren üstbilgisinde ve document.referrer öğesinde yer almalıdır.
Yönlendiren verisi örnekleri.

Bazı politikalar, bağlama bağlı olarak farklı davranışlar sergileyecek şekilde tasarlanmıştır: kaynaklar arası veya aynı kaynak isteği olup olmadığını kontrol edin. güvenli (veya her ikisi birden) olmalıdır. Bu, bilgi miktarını sınırlama konusunda faydalıdır kaynaklar arasında veya daha az güvenli kaynaklarda paylaşılırken zenginliği korur. bir örneğidir.

Aşağıdaki tabloda, yönlendiren politikalarının mevcut URL verilerini nasıl kısıtladığı gösterilmektedir Yönlendiren başlığı ve document.referrer bölümünden:

Politika kapsamı Politika adı Yönlendiren: Veri yok Yönlendiren: Yalnızca kaynak Yönlendiren: Tam URL
İstek bağlamını dikkate almaz no-referrer çek
origin çek
unsafe-url çek
Güvenlik odaklı strict-origin HTTPS'den HTTP'ye istek HTTPS'den HTTPS'ye
veya HTTP'den HTTP'ye istek
no-referrer-when-downgrade HTTPS'den HTTP'ye istek HTTPS'den HTTPS'ye
veya HTTP'den HTTP'ye istek
Gizlilik odaklı origin-when-cross-origin Kaynaklar arası istek Aynı kaynaklı istek
same-origin Kaynaklar arası istek Aynı kaynaklı istek
Gizlilik ve güvenlik odaklı strict-origin-when-cross-origin HTTPS'den HTTP'ye istek Kaynaklar arası istek
HTTPS'den HTTPS'ye
veya HTTP'den HTTP'ye
Aynı kaynaklı istek

MDN, politikalar ve davranışların tam listesini örnekler.

Yönlendiren politikası belirlerken göz önünde bulundurmanız gereken bazı noktalar aşağıda belirtilmiştir:

  • Şemayı (HTTPS ve HTTP) dikkate alan tüm politikalar (strict-origin, no-referrer-when-downgrade ve strict-origin-when-cross-origin) bir HTTP kaynağından gelen istekleri işleme başka bir HTTP kaynağı, bir HTTPS kaynağından diğerine yapılan isteklerle aynı şekilde HTTP daha az güvenli olsa da HTTPS kaynağı. Çünkü bu kişiler için politikalarında önemli olan, güvenliğin eski sürüme geçirilmesi olup olmamasıdır; verileri İstek, şifrelenmiş bir kaynaktan şifrelenmemiş bir kaynaktaki verileri açığa çıkarabiliyorsa birincisi, HTTPS → HTTP isteklerinde gösterilir. HTTP → HTTP isteği tamamen şifrelenmemiş olduğundan eski sürüme geçiş yapılmaz.
  • Bir istek aynı kaynak olduğunda şema (HTTPS veya HTTP) aynı olduğundan güvenlik düzeyinin düşürülmesi söz konusu değildir.

Tarayıcılardaki varsayılan yönlendiren politikaları

Ekim 2021 itibarıyla

Herhangi bir yönlendiren politikası ayarlanmazsa tarayıcı kendi varsayılan politikasını kullanır.

Tarayıcı Varsayılan Referrer-Policy / Davranış
Chrome Varsayılan değer: strict-origin-when-cross-origin.
Firefox Varsayılan değer: strict-origin-when-cross-origin.
. 93 sürümünden itibaren için ne kadar az olduğuna göre, kısıtlayıcı yönlendiren politikaları no-referrer-when-downgrade, origin-when-cross-origin ve unsafe-url siteler arası istekler için yoksayılır, yani yönlendiren her zaman kırpılır web sitesinin politikasından bağımsız olarak siteler arası istekler.
Edge Varsayılan değer: strict-origin-when-cross-origin.
Safari Varsayılan değer strict-origin-when-cross-origin değerine benzer, bazı farklılıklar olabilir. Görüntüleyin Takibi Önleme Takibini Engelleme başlıklı makaleden ayrıntılı bilgi edinebilirsiniz.

Yönlendiren politikası ayarlamak için en iyi uygulamalar

Siteniz için yönlendiren politikaları belirlemenin farklı yolları vardır:

Farklı sayfalar, istekler veya öğeler için farklı politikalar belirleyebilirsiniz.

Hem HTTP üstbilgisi hem de meta öğesi sayfa düzeyindedir. Öncelik sırası Bir elementin etkili politikasını belirlemek için şu adımları uygulayın:

  1. Öğe düzeyinde politika
  2. Sayfa düzeyinde politika
  3. Tarayıcı varsayılanı

Örnek:

index.html:

<meta name="referrer" content="strict-origin-when-cross-origin" />
<img src="..." referrerpolicy="no-referrer-when-downgrade" />

Resim, no-referrer-when-downgrade politikasıyla ve diğer tüm politikalarla istenir Bu sayfadan gelen alt kaynak istekleri strict-origin-when-cross-origin politikası.

Yönlendiren politikasını nasıl görebilirsiniz?

securityheaders.com sayesinde hangi web politikası.

Ayrıca Chrome, Edge veya Firefox'taki geliştirici araçlarını kullanarak yönlendiren politikası. Bu yazının yazıldığı sırada Safari Referrer-Policy üstbilgisini göstermez, ancak Referrer-Policy üstbilgisini gösteren Referer gönderilir.

Chrome Geliştirici Araçları&#39;ndaki ağ panelinin Yönlendiren ve Yönlendiren-Politika bölümünü gösteren ekran görüntüsü.
Chrome Geliştirici Araçları Bir isteğin seçili olduğu paneli.

Web siteniz için hangi politikayı ayarlamanız gerekir?

Şunun gibi açık bir şekilde gizlilik artırıcı bir politika belirlemenizi öneririz: strict-origin-when-cross-origin (veya daha katı).

Neden "açıkça"?

Bir yönlendiren politikası ayarlamazsanız tarayıcının varsayılan politikası kullanılır. Hatta web siteleri çoğu zaman tarayıcı varsayılanına erteleyin. Ancak bu ideal değildir çünkü:

  • Farklı tarayıcıların varsayılan politikaları farklıdır. Bu nedenle, siteniz, tarayıcılar genelinde tahmin edilebilir davranışlarda bulunmaz.
  • Tarayıcılar, strict-origin-when-cross-origin gibi daha katı varsayılan ayarları benimsiyor. yönlendiren kırpma gibi mekanizmalar kontrol eder. Gizlilik geliştirici politikasını açık bir şekilde etkinleştirme değişiklikleri kontrol etmenizi sağlar ve gerçek zamanlı olarak testler yapmanıza yardımcı olur. yardımcı olur.

Neden strict-origin-when-cross-origin (veya daha katı)?

Güvenli, gizliliği geliştiren ve faydalı bir politikaya ihtiyacınız var. Ne "faydalı"? anlamı, yönlendirenden ne istediğinize bağlıdır:

  • Güvenli: Web siteniz HTTPS kullanıyorsa (değilse HTTPS kullanın) öncelik) içeriyorsa web sitenizin URL'lerinin HTTPS olmayan isteklerdir. Ağdaki herkes bunları görebildiğinden, sızıntılar kullanıcılarınızı ortadaki kişi saldırılarına maruz bırakır. Politikalar no-referrer-when-downgrade, strict-origin-when-cross-origin, no-referrer, ve strict-origin bu sorunu çözüyor.
  • Gizliliği artırma: Kaynaklar arası istek için no-referrer-when-downgrade Tam URL'yi paylaştığından gizlilik sorunlarına yol açabilir. strict-origin-when-cross-origin ve strict-origin yalnızca kaynağı paylaşır. ve no-referrer hiçbir şey paylaşmıyor. Bu da strict-origin-when-cross-origin, strict-origin ve no-referrer: seçenekleri sunar.
  • Faydalı: no-referrer ve strict-origin hiçbir zaman tam URL'yi paylaşmasa bile aynı kaynağa sahip istekler için de geçerlidir. Tam URL'ye ihtiyacınız varsa strict-origin-when-cross-origin daha iyi bir seçenek olur.

Tüm bunlar, strict-origin-when-cross-origin'in genellikle bir mantıklı bir seçim.

Örnek: strict-origin-when-cross-origin politikası ayarlama

index.html:

<meta name="referrer" content="strict-origin-when-cross-origin" />

Alternatif olarak, sunucu tarafında, örneğin Express'te:

const helmet = require('helmet');
app.use(helmet.referrerPolicy({policy: 'strict-origin-when-cross-origin'}));

strict-origin-when-cross-origin (veya daha katı kurallar) tüm kullanım alanlarınızı barındırmıyorsa ne olur?

Bu durumda progresif bir yaklaşım izleyin: Şu gibi koruyucu bir politika belirleyin: Web siteniz için strict-origin-when-cross-origin ve gerekirse daha fazla belirli istekler veya HTML öğeleri için serbest politika.

Örnek: Öğe düzeyinde politika

index.html:

<head>
  <!-- document-level policy: strict-origin-when-cross-origin -->
  <meta name="referrer" content="strict-origin-when-cross-origin" />
  <head>
    <body>
      <!-- policy on this <a> element: no-referrer-when-downgrade -->
      <a src="…" href="…" referrerpolicy="no-referrer-when-downgrade"></a>
      <body></body>
    </body>
  </head>
</head>

Safari/WebKit, şunun için document.referrer veya Referer üstbilgisini sınırlandırabilir: siteler arası istekler. Ayrıntıları inceleyin.

Örnek: istek düzeyinde politika

script.js:

fetch(url, {referrerPolicy: 'no-referrer-when-downgrade'});

Diğer nelere dikkat etmelisiniz?

Politikanız, sizin tarafınızdan belirlenen web sitenize ve kullanım alanlarına bağlı olmalıdır. bir arada kullanma fırsatınız olur. Bazı URL'lerde tanımlayıcı veya hassas veriler varsa Koruyucu bir politika belirleyebilirsiniz.

Gelen istekler için en iyi uygulamalar

Sitenizde yönlendiren URL'yi kullanıyorsanız yapmanız gerekenlere ilişkin bazı yönergeleri burada bulabilirsiniz: emin olun.

Kullanıcıların güvenliğini sağlama veri

Referer gizli, kişisel veya tanımlayıcı veriler içerebilir. Bu nedenle böyle değerlendiriyorsunuz.

Gelen yönlendirenler {referer-can-change} içeriğini değiştirebilir

Gelen kaynaklar arası isteklerden yönlendirenin kullanılmasıyla ilgili birkaç sınırlama vardır:

  • İstek gönderenin uygulaması üzerinde herhangi bir denetime sahip değilseniz Referer başlığı (ve document.referrer) hakkında varsayımlarda bulunmalısınız. alabiliyorsunuz. İstek gönderen, no-referrer politikasına geçmeye karar verebilir daha sıkı bir politika uygulamak zorunda kalabilir. yardımcı olur. Bu nedenle, Referer uygulamasından geçmişe kıyasla daha az veri alacaksınız.
  • Tarayıcılar Yönlendiren Politikası'nı giderek daha fazla kullanıyor. strict-origin-when-cross-origin varsayılan olarak. Yani artık Google yerine sadece kaynak Gönderen site, gelen kaynaklar arası isteklerde tam yönlendiren URL'si politikası yok.
  • Tarayıcılar, Referer ürününü yönetme şeklini değiştirebilir. Örneğin, bazı tarayıcılarda geliştiriciler, kaynaklar arası kaynaklara yönlendiren yönlendirenleri her zaman kırpmaya karar verebilirler. alt kaynak istekleri hakkında bilgi edindiniz.
  • Referer başlığı (ve document.referrer) şundan daha fazla veri içerebilir: ihtiyacınız olacak. Örneğin, yalnızca bir açılış sayfasının istek, kaynaklar arası.

Referer yerine alternatifler

Aşağıdaki durumlarda alternatifleri değerlendirmeniz gerekebilir:

  • Sitenizin önemli bir özelliği, gelen kutunuzun yönlendiren URL'sini kaynaklar arası istekler.
  • Siteniz artık kaynaklar arası istek. Bu durum, istek gönderen, politikası olmadığında veya tarayıcı varsayılanının politikası değiştiğinde (Chrome 85'teki gibi).

Alternatifleri tanımlamak için, önce yönlendirenin hangi bölümünü kullandığınızı analiz edin.

Yalnızca kaynağa ihtiyacınız varsa

  • Yönlendireni, sayfaya üst düzey erişimi olan bir komut dosyasında kullanıyorsanız, window.location.origin alternatif bir yöntemdir.
  • Varsa Origin ve Sec-Fetch-Site size Origin değerini vermeli veya isteğin kaynaklar arası olup olmadığını, ihtiyacınız olabilir.

URL'nin diğer öğelerine (yol, sorgu parametreleri...) ihtiyacınız varsa

  • İstek parametreleri kullanım alanınıza hitap edebilir, bu da yönlendireni ayrıştırır.
  • Yönlendireni, sayfaya üst düzey erişimi olan bir komut dosyasında kullanıyorsanız, Alternatif olarak window.location.pathname çalışabilir. Yalnızca yolu ayıkla bölümüne ekleyin ve bunu bir bağımsız değişken olarak iletin. Böylece, URL parametrelerindeki bilgiler aktarılmaz.

Bu alternatifleri kullanamıyorsanız:

  • Sistemlerinizi, istek göndereni bekleyecek şekilde değiştirip değiştiremeyeceğinizi kontrol edin (örneğin, site-one.example) ekleyebilirsiniz. yapılandırma söz konusu.
    • Artısı: site-one.example kullanıcıları için daha müstehcen, gizliliği daha fazla korumaya yönelik, elde edebiliyorlar.
    • Dezavantajı: Sizin veya sisteminizin kullanıcılarının daha fazla iş yapmasını sağlayabilirsiniz.
  • İstekleri gönderen sitenin bir veya istek başına Yönlendiren Politikası için no-referrer-when-downgrade kullanın.
    • Dezavantaj: site-one.example kullanıcıları için gizliliği daha az korumaya sahip olma, tüm tarayıcılarda desteklenmeyebilir.

Siteler Arası İstek Sahtekarlığı (CSRF) koruması

İstek gönderen her zaman bir no-referrer politikası ihlal edilirse ve kötü niyetli kişiler yönlendirenin adresini taklit edebilir.

CSRF jetonlarını kullanma birincil korumanız olarak belirleyin. Daha fazla koruma için SameSite ve yerine Referer yerine Origin (POST ve CORS isteklerinde kullanılabilir) ve Sec-Fetch-Site kullanılabiliyorsa.

Günlüğe kaydetme ve hata ayıklama

verilerin gizlilikle ilgili olduğunu Referer

Yalnızca kaynağı kullanıyorsanız Origin üstbilgisi şu şekilde: bir alternatif. Bu sayede, hata ayıklama için gereken bilgileri elde edebilirsiniz bunu daha basit bir şekilde yapabilir ve yönlendireni ayrıştırmanıza gerek kalmaz.

Ödemeler

Ödeme sağlayıcılar, gelen isteklerin Referer başlığını kullanabilir. güvenlik kontrolleri.

Örneğin:

  • Kullanıcı online-shop.example/cart/checkout sitesinde Satın al düğmesini tıklar.
  • online-shop.example, şuraya yönlendirir: payment-provider.example belirtir.
  • payment-provider.example, bu isteğin Referer değerini bir listeyle karşılaştırarak kontrol eder (satıcılar tarafından belirlenen izin verilen Referer değeri) Herhangi bir listeye girdiğinde payment-provider.example isteği reddeder. Uyuyorsa kullanıcı işleme devam edebilir.

Ödeme akışı güvenlik kontrolleri için en iyi uygulamalar

Ödeme sağlayıcı olarak, bazı ödemelerle ilgili temel kontrol olarak Referer kullanabilirsiniz. anlamına gelir. Ancak Referer başlığı tek başına şunun için güvenilir bir temel değildir: kontrol. İstekte bulunan site, meşru bir satıcı olup olmadığına bakılmaksızın, no-referrer politikası, Referer ödeme sağlayıcı

Referer incelendikten sonra ödeme sağlayıcılar, no-referrer politikası belirlenmedi. İlk kontrol olarak Referer kullanırsanız:

  • Referer öğesinin her zaman mevcut olmasını beklemeyin. Varsa kontrol edin kaynak olan minimum verilerle karşılaştırarak değerlendirir.
    • İzin verilen Referer değerleri listesini ayarlarken, yalnızca şunları eklediğinizden emin olun: kaynak gösterilir, yol belirtmez.
    • Örneğin, online-shop.example için izin verilen Referer değerleri şu şekilde olmalıdır: online-shop.example/cart/checkout değil, online-shop.example. Bekleme süresi: ya hiç Referer yok ya da yalnızca istekte bulunan bir Referer değeri varsayımlarda bulunmaktan kaynaklanabilecek hataları önleyerek satıcının Referrer-Policy cihazı hakkında.
  • Referer yoksa veya mevcutsa ve temel Referer kaynağınız başarılı olursa daha güvenilir olmayan başka bir doğrulama yöntemidir.

Ödemeleri daha güvenilir şekilde doğrulamak için istekte bulunan tarafın istek parametrelerine karma oluşturma işlemi uygulamak için benzersiz bir anahtar kullanın. Ödeme sağlayıcılar daha sonra aynı karmayı sizin tarafınızda hesaplayabilir ve isteği yalnızca hesaplamanızla eşleşiyorsa kabul edin.

Yönlendireni olmayan bir HTTP satıcı sitesi olduğunda Referer öğesine ne olur? bir HTTPS ödeme sağlayıcıya yönlendirmesi durumunda ne yapmanız gerekir?

HTTPS ödeme sağlayıcıya yapılan istekte Referer görünmüyor. Bunun nedeni: çoğu tarayıcı, strict-origin-when-cross-origin veya Bir web sitesinde politika ayarlanmamışsa varsayılan olarak no-referrer-when-downgrade. Chrome'un yeni bir varsayılan politikayla değiştirilmesi bu davranışı değiştirmeyecek.

Sonuç

Koruyucu bir yönlendiren politikası, kullanıcılarınıza daha fazla gizlilik sağlamanın harika bir yoludur.

Kullanıcılarınızı korumaya yönelik farklı teknikler hakkında daha fazla bilgi edinmek için Güvenli ve güvenilir veri toplama

Kaynaklar

Tüm yorumculara, özellikle de Kaustubha Govind'e, katkıları ve geri bildirimleri için David Van Cleve, Mike West, Sam Dutton, Rowan Merewood, Jxck ve Kayce Basques.