Geliştirici politikası ve güvenlik yönergeleri

Simon Hangl
Simon Hangl
Demián Renzulli
Demián Renzulli

Yalıtılmış web uygulamaları (IWA'lar), web uygulamalarının genellikle standart "drive-by" web'de kısıtlanan Direct Sockets ve Controlled Frame gibi güçlü özelliklere erişmesine olanak tanıyan bir güvenlik modeli sunar. IWAs, yüksek güven ortamında çalıştığından katı güvenlik ve gizlilik politikalarına uymak zorundadır. Bu kurallar, web platformu daha fazla güç kazandıkça kullanıcıların güvende kalmasını ve tarayıcı ortamının bütünlüğünün korunmasını sağlamak için tasarlanmıştır.

IWA güven modeli

IWA platformunun temelinde, geliştiricileri yüksek düzeyde güvenlik sağlamaya zorlayan katı teknik politikalar yer alır. Standart web uygulamaları esnek bir izin modeline dayanırken IWA'lar, kaynaklarının ve bütünlüğünün doğrulanmasına olanak tanıyan Web Paketleri kullanılarak kriptografik olarak imzalanır ve teslim edilir.

IWAs, bu doğrulanmış kimlik karşılığında ayrıcalıklı API'lere erişim kazanır. Bu güveni korumak için geliştiriciler, güçlü özellikler kullanılırken bile kullanıcı güvenliğini sağlayan sağlam İçerik Güvenliği Politikası (İGP) ve Güvenilir Türler gibi daha katı politikalara uyarak güvenliği öncelikli tutmalıdır. Bunun anlamı şudur:

  • Şeffaflık: Kullanıcılar, uygulamaların ayrıcalıklı API'leri kullanması konusunda asla şaşırmamalıdır.
  • En Düşük Ayrıcalık: Uygulamalar yalnızca belirtilen amaçları için gerekli olan belirli özellikleri istemeli ve kullanmalıdır.
  • Statik Bütünlük: Güvenlik denetimi yapılmasına olanak tanımak ve kötü amaçlı kodun yanlışlıkla yüklenmesini önlemek için tüm yürütülebilir mantık, uygulama paketinde yer almalıdır.

IWAs, harici komut dosyalarının yürütülmesini engelleyen katı bir İçerik Güvenliği Politikası (CSP) gibi güçlü yerleşik korumalar içerse de teknik kısıtlamalar tek başına her riski azaltamaz. Yüksek güvene sahip bir ortamda bile belirli uygulama kalıpları veya geliştirici tercihleri, kullanıcı güvenliğini ya da gizliliğini istemeden tehlikeye atabilir. Bu kılavuzda, bu kısıtlanmış senaryolar ve ayrıcalıklı API'lerin kullanımını yöneten politikalar özetlenmektedir.

Bu kurallar neden önemli?

Bu politikalara uymak sadece uyumlulukla ilgili değil, aynı zamanda gelişmiş web uygulamaları için sürdürülebilir bir ekosistem oluşturmakla ilgilidir. Bu yönergelere uyarak uygulamanızın:

  • Güvenlik gerilemelerini önler: Mantığı bağımsız tutarak siteler arası komut dosyası çalıştırma (XSS) ve uzaktan kod çalıştırma gibi güvenlik açıklarını önler.
  • Kullanıcı gizliliğini korur: Hassas verilerin ve donanım erişiminin yalnızca açık kullanıcı niyeti ve şeffaflıkla işlenmesini sağlar.
  • Platformun uzun ömürlü olmasını sağlar: IWA platformunun özelliklerini genişletmeye devam edebilmesi için gereken yüksek güvenlik standartlarının korunmasına yardımcı olur.

Temel ilkeler

Şeffaflık ve kullanıcı amacı

En temel kural, kullanıcıyı şaşırtmamaktır. Uygulamanızın davranışı, belirtilen amacı ve kullanıcı beklentileriyle uyumlu olmalıdır.

  • Kapsamın dışına çıkmayın: Uygulamanızın açık amacının ötesine geçen işlevler uygulamayın.
  • Minimum API ayak izi: Yalnızca uygulamanızın temel işlevini yerine getirmek için gereken belirli IWA API'lerini isteyin ve kullanın.

Dinamik kod yan yüklemesi yok

IWA güvenlik modeli, yöneticilerin veya tarayıcı tedarikçisinin tüm yürütülebilir mantığı doğrulayabilmesine bağlıdır. Bu nedenle, IWA paketiniz bağımsız olmalıdır. Platform, eval() ve new Function() gibi dize tabanlı yürütmeyi engelleyen katı bir İçerik Güvenliği Politikası (İGP) aracılığıyla bunu zorunlu kılar:

script-src 'self' 'wasm-unsafe-eval';
require-trusted-types-for 'script';

CSP, 'wasm-unsafe-eval''nın WebAssembly'yi desteklemesine izin verse de bu güvenlik sınırının amacını göz ardı etmemelisiniz.

Kesinlikle yasaklanan uygulamalar

  • Uzak kod için yorumlayıcılar gönderme: Direct Sockets gibi ayrıcalıklı ağ erişimini kullanarak harici komut dosyalarını indirmek ve yürütmek için bir kod yorumlayıcı (ör. WASM'ye derlenmiş Python veya Lua) ekleyemezsiniz.
  • Uzaktan yüklenen mantık: Uzaktan yüklenen kodu IWA kaynağına yerleştirmek için hizmet çalışanlarını kullanmayın.
  • Kod ve veri: Verilerin (ör. JSON) indirilmesine izin verilirken yorumlanması veya çalıştırılması amaçlanan kodların indirilmesi doğrudan politika ihlalidir.

En az ayrıcalık ilkesi

Her zaman bir görevi tamamlayabilecek en az güçlü API'yi kullanın. Ayrıcalıklı IWA'ya özgü API'ler, standart Web API'lerinin güvenlik kısıtlamalarını veya kullanıcı istemlerini atlamak için asla kısayol olarak kullanılmamalıdır. Aşağıdaki tabloda, geleneksel web API'lerini ne zaman kullanacağınıza ve IWA'ya özgü özellikleri ne zaman kullanacağınıza karar vermenize yardımcı olacak yaygın kullanım alanları özetlenmiştir:

Görev Standart Web API'sini kullanın (önerilir) Ayrıcalıklı IWA API'sinden (Kısıtlanmış) kaçının
Harici sabit sürücü erişimi Standart dosya G/Ç'si için File System Access API'yi kullanın. Depolama alanına erişmek için Unrestricted WebUSB'yi kullanmayın.
Akıllı kart etkileşimi Smart Card API'yi kullanın. Akıllı kartlar için Unrestricted WebUSB'yi kullanmayın.
Seri cihaz iletişimi Cihazınız için yeterliyse WebSerial API'yi kullanın. WebSerial görevi yerine getirebiliyorsa Unrestricted WebUSB'den kaçının.
Güvenilir içeriği yerleştirme Standart bir <iframe> kullanın. Yalıtım gerekmediği sürece basit yerleştirme için <controlledframe> kullanmayın.

API'ye özel yönergeler

IWA API'leri, genellikle tarayıcıda kısıtlanmış güçlü özellikler sağlar. Genel olarak, bu ayrıcalıklı özelliklerin kullanıcıları şaşırtacak veya güvenlerini ve verilerini tehlikeye atacak şekilde kullanılmaması önerilir.

Direct Sockets API

Direct Sockets API, çoklu yayın ve yerel ağ erişimi dahil olmak üzere ham TCP ve UDP erişimi sağlar.

İzin veriliyor

  • Özel protokolleri destekleme: Şu anda daha üst düzey bir Web API'si bulunmayan özel protokoller kullanan uzak sunuculara bağlanma.
  • Arka uç hizmetlerini sürdürme: Uygulamanızın arka uç hizmetleri için özel olarak kullanılan, önceden tanımlanmış ve sabit kodlanmış bir sunucuya bağlanma.
  • Temel donanımları keşfetme: Uygulamanın işlevi için gerekli olan belirli ve ilgili donanımları (ör. ağa bağlı depolama birimini bulan bir video düzenleme uygulaması) keşfetmek için yerel ağa erişme veya çoklu yayın kullanma.

İzin verilmiyor

  • Kullanıcıyı şaşırtma: Uygulamanın temel işleviyle açıkça gerekçelendirilmeyen ağ erişimi uygulama (ör. yerel ağ cihazlarıyla iletişim kuran bir metin düzenleyici).
  • Ağları rastgele tarama: Kullanıcının yerel ağında geniş kapsamlı taramalar (örneğin, 192.168.1.0/24 bağlantı noktası taraması) yaparak kullanıcıyı profilleme veya alakasız cihazları keşfetme
  • Yerel cihazları hedefleme: Yerel ağdaki diğer cihazları incelemeye, yeniden yapılandırmaya veya saldırmaya çalışmak kesinlikle yasaktır.

Controlled Frame API

<controlledframe> öğesi, komut dosyası yerleştirme ve başlık değiştirme dahil olmak üzere kaynaklar arası içeriğin yerleştirilmesine ve değiştirilmesine olanak tanır.

İzin veriliyor

  • Kullanıcı arayüzlerini kolaylaştırma: Üçüncü taraf hizmeti yerleştirme ve alakasız kullanıcı arayüzü öğelerini gizlemek veya daha tutarlı bir deneyim sunmak için CSS ekleme.
  • Güvenli iletişime aracılık etme: postMessage ile yerleştirilmiş sayfadan istekler alarak ve yalnızca ayrıcalıklı API'ler aracılığıyla getirilen temizlenmiş, gerekli verileri döndürerek bekçi görevi görür.

İzin verilmiyor

  • Kullanıcı kimlik bilgilerini çalma: Yerleştirilmiş içerikten şifreleri, oturum çerezlerini veya diğer hassas kullanıcı verilerini yakalamak için komut dosyaları yerleştirme.
  • Hizmet şartlarını ihlal etme: Programatik reklam tıklama veya yetkisiz kazıma gibi, yerleştirilmiş platformları Hizmet Şartları'nı ihlal edecek şekilde değiştirme.
  • Ayrıcalıklı erişimi proxy'leme: Güvenilmeyen yerleştirilmiş içeriğe ayrıcalıklı bir IWA API'sine doğrudan veya kontrolsüz erişim sağlayan bir geçiş oluşturma.
  • Kontrolsüz yapay zeka uygulama: Belirli ve şeffaf kullanım alanı kısıtlamaları olmadan yapay zeka aracılığıyla, oturum açmış bir kullanıcı adına işlem yapma.

Sınırsız ekran kaydı

Standart web'de bulunan tekrarlanan kullanıcı izni istemleri olmadan ekran görüntüsü alınmasına olanak tanır.

İzin veriliyor

  • Temel işlevsellik sağlama: Ekran görüntüsü alma özelliğini, uygulamanın hizmetinin belirgin bir parçası olarak kullanma (ör. sanal toplantı veya eğitici video kaydı özellikleri).
  • Kullanıcıların farkındalığını sağlama: Kullanıcıları uygulamayla etkileşime geçmeden önce kayıt yapılabileceği konusunda net bir şekilde bilgilendirin.

İzin verilmiyor

  • Gizlice kayıt: Kullanıcının açık ve önceden verilmiş bilgisi ve izni olmadan ekranını kaydetme.
  • Gizlilik düzenlemelerini ihlal etme: Yerel veya uluslararası gizlilik yasalarını ihlal eden kayıt uygulamalarında bulunma.

Kısıtlanmamış WebUSB

Sınırsız WebUSB, cihazlarla düşük düzeyde etkileşime izin vermek için standart WebUSB engellenenler listesini atlar.

İzin veriliyor

  • Tescilli donanımı destekleme: Yüksek düzeyli web API'si bulunmayan özel veya eski donanımlarla (ör. endüstriyel kontrol cihazları) etkileşim kurma.

Artık izin veriliyor

  • Özel API'leri atlama: Akıllı kartlar (Smart Card API'yi kullanın) veya harici depolama alanı (File System Access API'yi kullanın) gibi daha spesifik ve kısıtlı bir API'ye sahip cihazlar için WebUSB'yi kullanma.

Pencere yönetimi (window.open ve window.focus)

IWAs, standart web'in gerektirdiği kullanıcı hareketi olmadan pop-up'lar ve odak pencereleri oluşturabilir.

İzin veriliyor

  • Görev tamamlandığında bildirim gönderme: Kullanıcı tarafından başlatılan kritik bir arka plan görevi (ör. video oluşturma) tamamlandığında uygulama penceresini odaklama.

İzin verilmiyor

  • Spam gönderme: Kullanıcıyı istenmeyen birden fazla pencereyle bombardıman etme.
  • Kimlik avı: Sistem iletişim kutularını taklit etmek veya kullanıcıyı kandırmak için tasarlanmış pencereler açma.
  • Odaklanmayı çalma: Önemli olmayan etkinlikler için diğer uygulamalardan odaklanmayı çalarak kullanıcıyı rahatsız etme.

Sonuç

Yalıtılmış web uygulamalarının güvenlik mimarisi, geliştiricileri desteklerken kullanıcılar için yüksek düzeyde güvenilir bir ortam sağlamak üzere tasarlanmıştır. Bu yönergelere uyarak uygulamanızın IWA ekosisteminin sorumlu bir üyesi olmasını sağlarsınız. Bu kılavuzdan çıkarılacak en önemli sonuçlar şunlardır:

  • Şeffaflığa Öncelik Verin: Uygulamanızın davranışı her zaman belirtilen amaçla uyumlu olmalıdır. Kullanıcıyı şaşırtacak veya aldatacak işlevler asla uygulanmamalıdır.
  • Paket Bütünlüğünü Zorunlu Kılma: Statik doğrulama için tüm yürütülebilir mantık, IWA paketinizde bağımsız olmalıdır. Güvenlik modelinin, dinamik kod yan yüklemesi veya uzaktan yorumlayıcılar aracılığıyla atlanması kesinlikle yasaktır.
  • En Az Ayrıcalık İlkesine Uyun: Belirli bir görev için her zaman mevcut olan en kısıtlı API'yi seçin. Ayrıcalıklı IWA API'leri yalnızca standart Web API'leri uygulamanın temel işlevselliği için yeterli olmadığında kullanılmalıdır.
  • Erişim denetleyicisi olarak hareket etme: <controlledframe> gibi güçlü araçlar kullanırken IWA'nız, güvenilmeyen içerik için şeffaf bir proxy yerine güvenli bir aracı olarak hareket etmelidir.

IWA'nızı yayınlamadan önce şu soruları sorarak uygulamanızın son denetimini yapın:

  1. Bu görev için mümkün olan en basit ve en kısıtlı API'yi mi kullanıyorum?
  2. Kullanıcılar, uygulamamın yaptıklarından dolayı şaşırır veya ihanete uğramış hisseder mi?

İlk sorunun yanıtı "Hayır" veya ikinci sorunun yanıtı "Evet" ise uygulamanızın IWA güvenlik politikalarını ihlal etmesi ve kaldırılması olasıdır.