deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Safari 27 ağ seviyesinde üçüncü taraf domainleri engelliyor: Sayfalarınızın temas ettiği tüm origin'leri nasıl denetlersiniz

Safari 27 artık bir kategori üçüncü taraf domaini ağ seviyesinde, varsayılan olarak açık olacak şekilde engelliyor. dev.to'daki bir rehber, ekiplerin sayfalarının temas ettiği tüm origin'leri envanterlemesini ve bunu yaparken karşılaşılan dört tuzağı açıklıyor.

Safari 27 ağ seviyesinde üçüncü taraf domainleri engelliyor: Sayfalarınızın temas ettiği tüm origin'leri nasıl denetlersiniz

dev.to'da yayımlanan bir yazıya göre Safari 27 artık bir kategori üçüncü taraf domaine ağ seviyesinde doğrudan bağlantıyı reddediyor ve bu engelleme varsayılan olarak açık. Yazının savunduğu üzere, ekipler politikadan ne düşünürse düşünsün, herkesi aynı soruyla baş başa bırakıyor: sayfalarımız bu domainlerden birine mi bağlanıyor? Çoğu ekip bunu yanıtlayamıyor ve bunun nedeni özensizlik değil. Bu domainler genellikle bir tag manager ya da bir pazarlama satıcısı üzerinden geliyor; bu da onları ekleyen şeyi koddan ziyade yapılandırma hâline getiriyor. Depoyu okumak hiçbir şey ortaya çıkarmıyor ve yanıt bir deployment olmadan değişebilir.

Ağ paneli bir denetim değildir

Tarayıcının ağ paneli bu soruyu tek bir sayfa yüklemesi için, sizin makinenizde, tesadüfen izlediğiniz yolda, eklentileriniz ve cookie durumunuz devredeyken yanıtlar. dev.to yazarı bunun faydalı olduğunu kabul ediyor, ama bu bir denetim değil: yalnızca giriş yapmış kullanıcılar için bir checkout sayfasında tetiklenen bir istek orada hiç görünmez.

Resource Timing, sayfanın gerçekte ne çektiğini listeler

Daha iyi bir yerel yöntem Resource Timing API. performance.getEntriesByType('resource') tarafından döndürülen girdileri alıp her birini origin'ine eşleyerek, kendi origin'inizi çıkarıp yinelenenleri ayıklarsanız, bir sayfanın gerçekten temas ettiği üçüncü tarafların kümesine ulaşırsınız. Yazı boyunca atıf yapılan MDN, API'nin XMLHttpRequest, resim ve scriptleri kapsadığını ve cross-origin kaynakların listede göründüğünü doğruluyor. Bir Timing-Allow-Origin header'ı ayarlanmadıkça cross-origin kaynaklar için birçok timing alanı sıfırlanıyor, ama burada gereken tek parça olan girdi adı okunabilir kalıyor.

Bu yöntem, yazının dört tuzağından ilkini gizliyor. MDN'e göre varsayılan olarak yalnızca 250 resource timing girdisi tamponlanıyor ve ağır bir sayfa bunu kolayca aşıyor; taşanlar sessizce kayboluyor. Buffered bayrağı ayarlanmış bir PerformanceObserver'ı resource girdileri için kaydetmek örneklemek yerine gözlemler, böylece hiçbir şey düşürülmez.

Report-only CSP, hiç ziyaret etmediğiniz sayfaları kapsar

Yukarıdaki her şey, tesadüfen bulunduğunuz yerden çalışıyor; orijinal sorunun yanıtlamasının zor olmasının nedeni de tam olarak bu. Her sayfayı ve her gerçek ziyaretçiyi kapsayan yaklaşım hiçbir şeyi engellemeyen bir response header'ı: Content-Security-Policy-Report-Only. MDN bunu, politikayı zorlamadan ihlalleri ve etkilerini izlemenin bir yolu olarak tanımlıyor; dolayısıyla bilerek yanlış olduğunu bildiğiniz bir politika, örneğin connect-src 'self', ilan edebilir ve hiç açmadığınız sayfalarda, production tarayıcılarından, başka her yere yapılan giden bağlantıların raporlarını toplayabilirsiniz.

Bu adımda üç tuzak var. İlki, yazarın bir öğleden sonrayı yuttuğunu söylediği: MDN, herhangi bir şey gönderilmesi için raporlama hedefinin report-to directive'i ile belirtilmesi gerektiğini belirtiyor; dolayısıyla report-to içermeyen bir report-only header hiçbir şey yapmaz ama tam olarak hiçbirinin ihlal etmediği bir politikaya benzer. İkincisi, report-to modern directive'tir ama henüz tam cross-browser desteği yok; MDN'in kendi örneği bu nedenle onu kullanımdan kaldırılmış report-uri ile birlikte bildiriyor ve yalnızca modern olanı ayarlayan ekipler bazı tarayıcılardan rapor toplayıp geri kalanların temiz olduğu sonucuna yanlışlıkla varacak. Son olarak MDN, report-only header'ın bir meta elementinin içinde desteklenmediğini belirtiyor; dolayısıyla response header ayarlamanın zor olduğu deployment'lar markup'a geri çekilemez, çünkü o etiket sessizce yok sayılır.

Neden önemli

Listedeki herhangi bir origin size hiç ulaşmayan nedenlerle karanlığa gömülebilir: bir tarayıcı varsayılanı, bir eklenti, endpoint security yazılımı, kurumsal bir proxy, domaini farklı çözen bir ağ. Engellenen istek, erişiminiz olmayan bir tarayıcının içinde başarısız olur; sunucu hiçbir şey kaydetmez ve eksiksiz loglar hiçbir şey ortaya çıkarmaz. Nihai sinyal, bir kullanıcının kaydolmanın çalışmadığını bildirmesidir; hiçbir üçüncü taraftan söz edilmez, çünkü kullanıcıların bunu görme yolu yoktur. Önceden kurulmuş bir envanter — yazarın tahminiyle tek bir öğleden sonra sürüyor — o bildirimi bir gizemden hızlı bir teşhise dönüştürür ve üçüncü taraf bağımlılıklarınızı, tam onlardan biri kaybolduğu anda keşfetmekten çok daha ucuza mal olur.

  • #safari
  • #browser-security
  • #content-security-policy
  • #resource-timing
  • #web-development

İlgili yazılar