Web geliştiricileri için Site İzolasyonu

Masaüstündeki Chrome 67'de, Site İzolasyonu adlı yeni bir özellik varsayılan olarak etkindir. Bu Makalede, Site İzolasyonunun ne olduğu, neden gerekli olduğu ve web geliştiricilerin neden bunun farkında olun.

Site İzolasyonu nedir?

İnternet, kedi videoları izlemek ve kripto para birimi cüzdanlarını yönetmek için kullanılır. ancak fluffycats.example ürününün değerli kripto paralarınıza erişmesini istemezsiniz. Neyse ki Same-Origin sayesinde web siteleri genellikle tarayıcıdaki birbirlerinin verilerine erişemez Politika. Yine de kötü amaçlı web siteleri, diğer web sitelerine saldırmak için bu politikayı atlatmaya çalışabilir. Bazen tarayıcı kodunda Same-Origin Politikası'nı zorunlu kılan güvenlik hataları bulunur. İlgili içeriği oluşturmak için kullanılan Chrome ekibi, bu tür hataları mümkün olduğunca hızlı bir şekilde düzeltmeyi hedefler.

Site İzolasyonu, sitenizin güvenliğini sağlamak için ek bir savunma hattı sunan Chrome bu tür saldırıların başarılı olma ihtimali daha düşüktür. Farklı web sitelerindeki sayfaların her zaman her biri bir korumalı alanda çalıştırılan ve işlemin ne yapmasına izin verildiğini sınırlayan farklı süreçlere ayırır. Ayrıca, işlemin diğer sitelerden belirli türlerdeki hassas verileri almasını da engeller. Kullanıcı Sonuç olarak, Site İzolasyonu sayesinde kötü amaçlı bir web sitesinin, spekülatif nitelikteki Spectre gibi diğer sitelerden veri çalmaya yönelik yan kanal saldırılarıdır. Chrome ekibi projeyi tamamladığında ek yaptırımlar söz konusu olduğunda, Site İzolasyonu bir saldırganın sayfası bazı özellikleri ihlal ettiğinde bile izlemesine olanak tanır.

Site İzolasyonu, güvenilmeyen web sitelerinin bilgilere erişmesini veya bilgileri çalmasını etkili bir şekilde zorlaştırır diğer web sitelerindeki hesaplarınızdan. Çeşitli türlere karşı ek koruma sağlar gibi güvenlik hatalarının kısa süre önce yaşanan Meltdown ve Spectre yan kanal saldırılarından kaçının.

Site İzolasyonu hakkında daha fazla bilgi edinmek için Google Güvenlik blogundaki makalemize göz atın.

Kaynaklar Arası Okuma Engelleme

Siteler arası tüm sayfalar ayrı işlemlere konulsa bile sayfalar meşru olarak istekte bulunabilir. resimler ve JavaScript gibi bazı siteler arası alt kaynaklar. Kötü amaçlı bir web sayfası, Banka bakiyeniz gibi hassas veriler içeren bir JSON dosyası yüklemek için <img> öğesi:

<img src="https://your-bank.example/balance.json" />
<!-- Note: the attacker refused to add an `alt` attribute, for extra evil points. -->

Site İzolasyonu olmadan, JSON dosyasının içeriği oluşturucunun belleğine aktarılır oluşturucu, bu işlem sırasında bunun geçerli bir resim biçimi olmadığını fark eder ve bir resim. Ancak saldırgan, Spectre gibi bir güvenlik açığından yararlanarak olabilir.

Saldırgan, hassas verileri ele geçirmek için <img> kullanmak yerine <script> kullanabilir hafıza:

<script src="https://your-bank.example/balance.json"></script>

Çapraz Kaynak Okuma Engelleme veya CORB, balance.json, MIME türüne bağlı olarak oluşturucu işlem belleğinin belleğine girmesini engeller.

CORB'nin işleyiş şeklini ayrıntılı olarak inceleyelim. Bir web sitesi, bir sunucudan iki tür kaynak isteyebilir:

  1. HTML, XML veya JSON dokümanları gibi veri kaynakları
  2. Resimler, JavaScript, CSS veya yazı tipleri gibi medya kaynakları

Bir web sitesi kendi veya diğer kaynaklardan veri kaynaklarını alabilmelidir. izin veren CORS başlıkları Access-Control-Allow-Origin: *. Öte yandan, medya kaynakları başlangıç noktası (izinli CORS başlıkları olmasa bile)

CORB, oluşturucu işleminin kaynaklar arası veri kaynağı (ör. HTML, XML veya JSON) şu durumlarda geçerlidir:

  • kaynağın X-Content-Type-Options: nosniff üstbilgisi var
  • CORS, kaynağa erişime açıkça izin vermediğinde

Kaynaklar arası veri kaynağında X-Content-Type-Options: nosniff başlığı ayarlanmamışsa CORB, yanıt gövdesini dinleyerek HTML, XML veya JSON olup olmadığını belirlemeye çalışır. Bu Örneğin, bazı web sunucuları yanlış yapılandırıldığı ve görüntüleri text/html biçiminde sunduğu için gereklidir.

CORB politikası tarafından engellenen veri kaynakları ise işleme boş olarak sunulur. istek arka planda gerçekleşmeye devam eder. Sonuç olarak, kötü amaçlı bir web sayfası Siteler arası verileri çalmak için kendi işlemine çekme.

En iyi güvenlik ve CORB özelliğinden yararlanmak için aşağıdakileri öneririz:

  • Yanıtları doğru Content-Type başlığıyla işaretleyin. (Örneğin, HTML kaynakları text/html olarak sunulur, bir JSON MIME türü ve XML bir XML MIME türü).
  • X-Content-Type-Options: nosniff başlığını kullanarak yoklama özelliğini devre dışı bırakın. Bu başlık olmasaydı Chrome, türün doğru olduğunu onaylamak için hızlı bir içerik analizi yapar. JavaScript dosyaları ve benzeri öğeleri engellememek için yanıtlara izin sizin doğru olanı yapmanız, olumlu bir şekilde yapman daha iyi olur.

Daha ayrıntılı bilgi için Web geliştiricileri için CORB makalesi veya kapsamlı CORB açıklayıcımızdır.

Web geliştiricileri Site İzolasyonuna neden önem vermelidir?

Çoğunlukla, Site İzolasyonu , sitenizin kullanıcılar tarafından doğrudan erişime kapalı olması web geliştiricileri tarafından görülmektedir. Örneğin, web'de öğrenilecek yeni bir API yoktur. Genel olarak, web sayfaları, Site İzolasyonu ile veya Site İzolasyonu olmadan çalışırken farkı ayırt edememelidir.

Ancak bu kuralın bazı istisnaları vardır. Site İzolasyonu'nun etkinleştirilmesi için bazı yan etkilere yol açabilir. Sağlığımız bilinen Site İzolasyonu sorunlarının bir listesini Aşağıda en önemlilerini ayrıntılı olarak ele alıyoruz.

Tam sayfa düzeni artık eşzamanlı değil

Site İzolasyonu ile tam sayfa düzeninin artık bir sayfa birden çok işleme yayılmış olabilir. Bu durum, düzen değişikliği, sayfadaki tüm çerçevelere hemen uygulanır.

Örnek olarak, ana makineyle iletişim kuran fluffykittens.example social-widget.example adresinde barındırılan sosyal widget:

<!-- https://fluffykittens.example/ -->
<iframe src="https://social-widget.example/" width="123"></iframe>
<script>
  const iframe = document.querySelector('iframe');
  iframe.width = 456;
  iframe.contentWindow.postMessage(
    // The message to send:
    'Meow!',
    // The target origin:
    'https://social-widget.example'
  );
</script>

Sosyal medya widget'ının <iframe> genişliği, başlangıçta 123 pikseldir. Ancak FluffyKittens sayfası genişliği 456 piksel (düzeni tetikleme) olarak değiştirir ve sosyal medya widget'ına bir mesaj gönderir. şu kodu içerir:

<!-- https://social-widget.example/ -->
<script>
  self.onmessage = () => {
    console.log(document.documentElement.clientWidth);
  };
</script>

Sosyal medya widget'ı postMessage API üzerinden bir mesaj aldığında, kök <html> öğesi.

Hangi genişlik değeri günlüğe kaydedilir? Chrome, Site İzolasyonu'nu etkinleştirmeden önce yanıt 456 idi. Erişme document.documentElement.clientWidth, eskiden Chrome'dan önce eşzamanlı olan düzeni zorunlu kılar Site İzolasyonu'nu etkinleştirmelisiniz. Ancak Site İzolasyonu etkinken kaynaklar arası sosyal medya widget'ı Yeniden düzenleme artık eşzamansız olarak ayrı bir süreçte gerçekleştiriliyor. Bu nedenle, yanıt artık 123, ör. eski width değeri.

Bir sayfa, çapraz kaynak <iframe> boyutunu değiştirir ve ardından ona bir postMessage gönderirse (örneğin, Site izolasyonu, iletiyi alırken yeni boyutunu henüz bilmiyor olabilir. Daha fazla bir düzen değişikliğinin doğrudan tüm çerçeveler.

Bu örnekte, daha sağlam bir çözüm üst çerçevede width değerini ayarlarken bir resize etkinliğini dinleyerek <iframe> ile ilgili değişikliği algılar.

Kaldırma işleyicileri daha sık zaman aşımına uğrayabilir

Bir çerçeve gezinirken veya kapatıldığında, hem eski doküman hem de içine yerleştirilmiş tüm alt çerçeve dokümanları gösterilir. tüm kullanıcılar unload işleyicisini çalıştırıyor. Yeni gezinme aynı oluşturucu işleminde (ör. aynı kaynak gezinme varsa) eski dokümanın ve alt çerçevelerinin unload işleyicileri uzun süre beklemeye çalıştığınızı fark edebilirsiniz.

addEventListener('unload', () => {
  doSomethingThatMightTakeALongTime();
});

Bu durumda, tüm karelerdeki unload işleyicileri son derece güvenilirdir.

Ancak, Site İzolasyonu olmasa bile bazı ana çerçeve gezinmeleri çapraz işlemlidir. Bu durum, davranışına dikkat edin. Örneğin, old.example konumundan new.example konumuna yazarsanız new.example gezinmesi yeni bir işlemde gerçekleşir. Kaldırma old.example ve alt çerçevelerinin işleyicileri arka planda old.example işleminde çalışır. new.example sayfası gösterildikten sonra eski kaldırma işleyiciler otomatik olarak belirli bir zaman aşımı süresi içinde tamamlamalıdır. Kaldırma işleyicileri zaman aşımından önce bitmeyebileceği için kaldırma davranışı daha az güvenilirdir.

Site İzolasyonu ile tüm siteler arası gezinmeler çapraz işlemli hale gelir ve böylece Farklı siteler bir süreci birbirleriyle paylaşmaz. Sonuç olarak, yukarıdaki durum daha fazla durumda olur ve <iframe> içindeki kaldırma işleyicileri genellikle arka plan ve zaman aşımı davranışlarına sahiptir 'ne başvurun.

Site İzolasyonu'ndan kaynaklanan bir başka fark da kaldırma işleyicilerin yeni paralel sıralamasıdır: Site İzolasyonu olmadan, kaldırma işleyicileri kareler genelinde yukarıdan aşağıya kesin bir düzende çalışır. Ancak Site ile Yalıtım ve kaldırma işleyicileri farklı süreçlerde paralel olarak çalışır.

Bunlar, Site İzolasyonu'nun etkinleştirilmesinin temel sonuçlarıdır. Chrome ekibi, Yaygın kullanım alanları için kaldırma işleyicilerin güvenilirliğini (uygun olduğu durumlarda) iyileştirme. Ayrıca alt çerçeve kaldırma işleyicilerin henüz belirli özellikleri kullanamadığı ve bu nedenle birlikte çalışır.

Kaldırma işleyicileri için önemli bir durum da oturum sonu ping'leri göndermektir. Bu işlem genellikle şöyle olur:

addEventListener('pagehide', () => {
  const image = new Image();
  img.src = '/end-of-session';
});

Bu değişiklik doğrultusunda daha etkili bir yaklaşım, navigator.sendBeacon kullanmaktır. aşağıdaki adımları uygulayabilirsiniz:

addEventListener('pagehide', () => {
  navigator.sendBeacon('/end-of-session');
});

İstek üzerinde daha fazla kontrole ihtiyacınız varsa Getirme API'sinin keepalive seçeneğini kullanabilirsiniz:

addEventListener('pagehide', () => {
  fetch('/end-of-session', {keepalive: true});
});

Sonuç

Site İzolasyonu, güvenilmeyen web sitelerinin Google Hesabınıza ait bilgilere erişmesini veya bilgileri çalmasını zorlaştırır. diğer web sitelerindeki hesapları kullanarak her siteyi kendi işleminde izole edebilir. Bu kapsamda CORB, hassas veri kaynaklarını oluşturucu işleminin dışında tutun. Yukarıdaki önerilerimiz, en iyi şekilde nasıl yararlanabileceğinizi açıklayacağız.

Teşekkürler Alex Moshchuk, Charlie Reis, Jason Miller, Nasko Oskov, Philip Walton, Shubhie Panicker ve Thomas Steiner'ın yer aldığı daha fazla içerik bu makalenin taslak sürümünü okuduğunuz ve geri bildirimde bulunduğunuz için teşekkür ederiz.