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:
- HTML, XML veya JSON dokümanları gibi veri kaynakları
- 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.