WebAssembly - Seguridad
Según el sitio web oficial de WebAssembly.org, que está disponible en https://webassembly.org/docs/security/ El objetivo principal de WebAssembly en términos de seguridad es el siguiente:
El modelo de seguridad de WebAssembly tiene dos objetivos importantes:
Proteger a los usuarios de módulos con errores o maliciosos, y
Proporcionar a los desarrolladores primitivas y mitigaciones útiles para desarrollar aplicaciones seguras, dentro de las limitaciones de (1).
El código compilado, es decir, WASM de C / C ++ / Rust no se ejecuta directamente dentro del navegador y hace uso de las API de JavaScript. El código de WASM está en un espacio aislado, es decir, se ejecuta a través de la envoltura de la API de JavaScript y el navegador se comunica con WASM utilizando la API.
A continuación, se muestra un ejemplo del uso de un archivo .wasm dentro del navegador.
Ejemplo - C Program
#include<stdio.h>
int square(int n) {
return n*n;
}
Usaremos el explorador WASM para obtener el código wasm -
Descargue el código WASM y utilícelo para probar las API.
Ejemplo
<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>
Salida
Obtendrá el siguiente resultado:
Los objetos de exportación tienen una referencia a la función a llamar. Para llamar a la función cuadrado, tendrá que hacerlo de la siguiente manera:
console.log(finalcode.instance.exports.square(25));
Problemas con el código compilado de WASM
Los siguientes son los problemas con el código compilado de WASM:
Es difícil comprobar si se está insertando algún código malicioso mientras se compila el código en wasm. No hay herramientas disponibles en este momento para validar el código.
Wasm es difícil de analizar y el código defectuoso / malicioso se puede ejecutar fácilmente dentro del navegador.