WebAssembly - Güvenlik

WebAssembly.org resmi web sitesine göre, şu adresten ulaşılabilir: https://webassembly.org/docs/security/ Güvenlik açısından WebAssembly'nin temel amacı aşağıdaki gibidir -

WebAssembly güvenlik modelinin iki önemli hedefi vardır:

  • Kullanıcıları hatalı veya kötü amaçlı modüllerden koruyun ve

  • Geliştiricilere (1) 'in kısıtlamaları dahilinde güvenli uygulamalar geliştirmek için yararlı ilkeler ve azaltmalar sağlayın.

Derlenen kod, yani C / C ++ / Rust'tan WASM doğrudan tarayıcı içinde çalıştırılmaz ve Javascript API'lerinden yararlanır. WASM kodu korumalı alanlıdır, yani Javascript API sarmalayıcısı aracılığıyla yürütülür ve tarayıcı API'yi kullanarak WASM ile iletişim kurar.

Burada, tarayıcının içinde bir .wasm dosyası kullanma örneği verilmiştir.

Örnek - C Program

#include<stdio.h> 
int square(int n) { 
   return n*n; 
}

Wasm kodunu almak için WASM explorer'ı kullanacağız -

WASM kodunu indirin ve API'leri test etmek için kullanın.

Misal

<script type="text/javascript"> 
   const importObj = {
      module: {}
   }; 
   fetch("findsquare.wasm")      
      .then(bytes => bytes.arrayBuffer())          
      .then(module => WebAssembly.instantiate(module,importObj))                 
      .then(finalcode => {
         
      console.log(finalcode); console.log(finalcode.instance.exports.square(25)); 
   }); 
</script>

Çıktı

Aşağıdaki çıktıyı alacaksınız -

Dışa aktarılan nesnelerin çağrılacak işleve bir referansı vardır. Fonksiyon karesini aramak için, bunu aşağıdaki gibi yapmanız gerekecek -

console.log(finalcode.instance.exports.square(25));

WASM derlenmiş koduyla ilgili sorunlar

WASM derlenmiş koduyla ilgili sorunlar aşağıdadır -

  • Kodu wasm'ye derlerken herhangi bir kötü amaçlı kodun eklenip eklenmediğini kontrol etmek zordur. Şu anda kodu doğrulamak için herhangi bir araç yok.

  • Wasm'ı analiz etmek zordur ve buggy / kötü amaçlı kod tarayıcı içinde kolayca çalıştırılabilir.