Android Chrome 88 ve Masaüstü Chrome 92'de SharedArrayBuffer güncellemeleri

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.

  1. Kaynağınız için jeton isteyin.
  2. 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

Daha fazla bilgi

Doğan'ın banner fotoğrafı Unsplash'te Gregoire