WebAssembly - Sicurezza
Secondo il sito web ufficiale di WebAssembly.org, disponibile all'indirizzo https://webassembly.org/docs/security/ l'obiettivo principale di WebAssembly in termini di sicurezza è il seguente:
Il modello di sicurezza di WebAssembly ha due obiettivi importanti:
Proteggi gli utenti da moduli difettosi o dannosi e
Fornire agli sviluppatori utili primitive e mitigazioni per lo sviluppo di applicazioni sicure, entro i limiti di (1).
Il codice compilato, ad esempio WASM da C / C ++ / Rust, non viene eseguito direttamente all'interno del browser e fa uso di API Javascript. Il codice WASM è in modalità sandbox, ovvero eseguito tramite wrapper API Javascript e il browser comunica con WASM utilizzando l'API.
Ecco un esempio di utilizzo di un file .wasm all'interno del browser.
Esempio - C Program
#include<stdio.h>
int square(int n) {
return n*n;
}
Useremo WASM explorer per ottenere il codice wasm -
Scarica il codice WASM e usalo per testare le API.
Esempio
<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>
Produzione
Otterrai il seguente output:
Gli oggetti di esportazione hanno un riferimento alla funzione da chiamare. Per chiamare la funzione quadrato, dovrai farlo come segue:
console.log(finalcode.instance.exports.square(25));
Problemi con il codice compilato WASM
Di seguito sono riportati i problemi con il codice compilato WASM:
È difficile controllare se è stato inserito del codice dannoso durante la compilazione del codice in wasm. Non ci sono strumenti disponibili in questo momento per convalidare il codice.
Wasm è difficile da analizzare e il codice difettoso / dannoso può essere facilmente eseguito all'interno del browser.