SharedArrayBuffer
platformunun oldukça zor bir şekilde başladığını söylemek gerekirse
web'de sorun yaşanıyor. Şunları bilmeniz gerekir:
Kısaca
SharedArrayBuffer
şu anda Firefox 79 ve sonraki sürümlerde desteklenmektedir ve Android'e gelecektir Chrome 88. Ancak yalnızca kaynaklar arası erişime kapalı sayfalar tarafından kullanılabilir.SharedArrayBuffer
şu anda Masaüstü Chrome'da kullanılabilir, ancak Chrome'dan kullanılabilir 92'de kökler arası erişime kapalı sayfalarla sınırlı olacaktır. Düşündüğünüzü Bu değişikliği zamanında yapabiliyorsanız, bir kaynak denemesine kaydolarak mevcut davranışı en azından Chrome'un en azından bir sürümüne kadar koruyabilirsiniz 113.- URL'leri kullanmaya devam etmek için kökler arası izolasyonu etkinleştirmeyi
SharedArrayBuffer
Bunun diğer çapraz kaynaklar üzerinde yaratacağı etkiyi değerlendirin web sitenizdeki reklam yerleşimleri gibi.SharedArrayBuffer
olup olmadığını kontrol edin üçüncü taraf kaynaklarınızdan herhangi biri tarafından kullanılan rehberlik eder.
Kaynaklar arası erişime genel bakış
Bir sayfayı aşağıdakilerle sunarak bir sayfayı kaynaklar arası erişime kapalı hale getirebilirsiniz başlıklar:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Bu işlemden sonra sayfanız devre dışı bırakılmadığı sürece
kaynak, Cross-Origin-Resource-Policy
aracılığıyla açıkça izin veriyor
veya CORS üstbilgileri
(Access-Control-Allow-*
vb.).
Bir Reporting API de mevcuttur.
nedeniyle başarısız olan talepler hakkında veri toplayabilir.
Cross-Origin-Embedder-Policy
ve Cross-Origin-Opener-Policy
.
Chrome 92 için bu değişiklikleri zamanında yapamayacağınızı düşünüyorsanız Mevcut Masaüstü Chrome sürümünü kullanmaya devam etmek için kaynak deneme sürümüne kaydolun Chrome 113 sürümünden itibaren çalışır.
Bu sayfanın alt kısmındaki Daha fazla bilgi bölümüne göz atın. sayfasına göz atın.
Buraya nasıl geldik?
SharedArrayBuffer
, Chrome 60'ta (bu Temmuz 2017) kullanıma sunuldu:
saati değil, tarih olduğunu düşünebilirsiniz) ve her şey harikaydı.
6 ay süreyle.
Ocak 2018'de bazı popüler CPU'larda bir güvenlik açığı tespit edildi. Bkz. duyuru ayrıntılı bir inceleme yapıyorlardı, ancak aslında kodun yüksek çözünürlüklü zamanlayıcıları kullanır.
Sitelerin çalıştırmasına izin vermek istediğimizden, bu sorun tarayıcı tedarikçi firmaları açısından bir sorundu. kodu JavaScript ve WASM biçiminde olur, ancak bu kod erişebilir. Web siteme gelirseniz, bu bilgiyi okuyamamam gerekir. açık olduğunuz internet bankacılığı sitesinden de alabilirsiniz. Aslına bakarsanız açık olduğunu bile bilebilirsiniz. Bunlar proje zaman çizelgesinin web güvenliği.
Bu sorunu azaltmak için, yüksek çözünürlüklü zamanlayıcılarımızın çözünürlüğünü düşürdük.
performance.now()
olarak. Ancak yüksek çözünürlüklü bir zamanlayıcı oluşturabilirsiniz.
SharedArrayBuffer
, bir çalışanda sıkı döngü içinde belleği değiştirip
başka bir ileti dizisinde geri alabilir. Bu durum etkili bir şekilde azaltılamaz;
iyi planlanmış kodu ciddi ölçüde etkilediğinden SharedArrayBuffer
devre dışı bırakıldı
Hepsini.
Genel çözüm, bir web sayfasının sistem işleminde hassas verileri içerebilir. Chrome, çoklu işleme yatırım yapmıştı daha baştan üretmiş (çizgi romanı hatırlıyor musunuz?) birden fazla sitedeki verilerin aynı süreçte bulunabileceği durumlar da söz konusudur:
<iframe src="https://your-bank.example/balance.json"></iframe>
<script src="https://your-bank.example/balance.json"></script>
<link rel="stylesheet" href="https://your-bank.example/balance.json" />
<img src="https://your-bank.example/balance.json" />
<video src="https://your-bank.example/balance.json"></video>
<!-- …and more… -->
Bu API'lerin "eski" sürümü diğer kaynaklardan gelen içeriğin uygun düştüğünü gösteren diğer kaynaktan etkinleştirilmeden kullanılır. Bu talepler diğer kaynaktan gelen çerezlerdir; dolayısıyla tam bir "giriş yapılmış" isteğinde bulunabilirsiniz. Günümüzde yeni API'ler, CORS.
İçeriğin web sayfasının işlemi "yanlış" görünüyorsa ve kaynaklar arası okuma engelleme olarak adlandırıldı. Dolayısıyla, yukarıdaki durumlarda için geçerli bir biçim olmasını öneririz. Yani iframe'ler hariçtir. iframe'ler için, işleme koyacağız.
Bu çözümleri uyguladıktan sonra, SharedArrayBuffer
ürününü Chrome'da yeniden kullanıma sunduk.
68 (Temmuz 2018) tarihinde yalnızca masaüstünde. Ek işlem şartları,
aynısını mobil cihazlarda yapamıyordu. Ayrıca, Chrome'un çözümünün
yerine geçmediğinden, yalnızca 'yanlış' veri biçimleridir.
olası (alışılmadık olsa da) tahmin edilebilir URL'lerde geçerli CSS/JS/resimlerin
Gizli veriler içerebilir.
Web standartları kişiler daha kapsamlı bir tarayıcılar arası tarayıcı geliştirmek için bir araya geldi
çözümüne geçelim. Bunun çözümü, sayfalara "İşbu belgeyle
diğer kaynaklardan gelen içerikleri bu sürece dahil etme yetkisi yoktur.
Bu bildirim COOP ve COEP başlıkları aracılığıyla yapılır.
sayfayla birlikte sunulur. Tarayıcı bunu uygular ve karşılığında sayfa
SharedArrayBuffer
ve benzer güçlere sahip diğer API'lere erişim. Diğer kaynaklar
içerik yerleştirmeyi etkinleştirebilir,
Cross-Origin-Resource-Policy
veya CORS.
Firefox, bu kısıtlamayla SharedArrayBuffer
ürününü gönderen ilk şirket oldu
sürüm 79 (Temmuz 2020).
Daha sonra Ocak 2021'de bu makaleyi yazdım ve siz de bu makaleyi okudunuz. Merhaba,
Bugün geldiğimiz nokta bu. Chrome 88 sayesinde SharedArrayBuffer
Kökler arası erişime kapalı sayfalar için Android, Chrome 92'de de aynı
için hem tutarlılık hem de toplam çapraz kaynak elde etmek için
masaüstü için gerekli olan
izole ediliyor.
Masaüstü Chrome değişikliğini erteleme
Bu, "kaynak deneme" biçimindeki geçici bir istisnadır herkes için
kökler arası erişime kapalı sayfaları uygulamak için daha fazla zaman. Projenin yaşam döngüsünün
SharedArrayBuffer
özelliğinde sayfanın kökler arası erişime kapalı olması gerekmez. İlgili içeriği oluşturmak için kullanılan
Chrome 113 sürümünden itibaren geçerli olup bu istisna yalnızca
Chrome'a dokunun.
- Kaynağınız için jeton isteyin.
- Jetonu sayfalarınıza ekleyin. Bunu iki şekilde yapabilirsiniz:
- Her sayfanın başlığına
origin-trial
<meta>
etiketi ekleyin. Örneğin,
gibi bir değer olabilir<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
- Sunucunuzu yapılandırabiliyorsanız jetonu da ekleyebilirsiniz
veya
Origin-Trial
HTTP üstbilgisi kullanarak. Sonuçta ortaya çıkan yanıt başlığı, aşağıdaki gibi görünür:
Origin-Trial: TOKEN_GOES_HERE
- Her sayfanın başlığına
Daha fazla bilgi
- Kaynaklar arası izolasyonu etkinleştirme rehberi
- Sayfalarınızı kaynaklar arası izole etme
- Kaynaklar arası izolasyon neden gerekli?
Doğan'ın banner fotoğrafı Unsplash'te Gregoire