WebAssembly - Bảo mật

Theo trang web chính thức của WebAssembly.org, có sẵn tại https://webassembly.org/docs/security/ mục tiêu chính của WebAssembly về mặt bảo mật như sau:

Mô hình bảo mật của WebAssembly có hai mục tiêu quan trọng:

  • Bảo vệ người dùng khỏi các mô-đun lỗi hoặc độc hại và

  • Cung cấp cho các nhà phát triển các nguyên tắc và giảm thiểu hữu ích để phát triển các ứng dụng an toàn, trong các ràng buộc của (1).

Mã đã biên dịch tức là WASM từ C / C ++ / Rust không được thực thi trực tiếp bên trong trình duyệt và sử dụng API của Javascript. Mã WASM được hộp cát tức là được thực thi thông qua trình bao bọc API Javascript và trình duyệt nói chuyện với WASM bằng cách sử dụng API.

Đây là một ví dụ về việc sử dụng tệp .wasm bên trong trình duyệt.

Ví dụ - C Program

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

Chúng tôi sẽ sử dụng trình thám hiểm WASM để lấy mã wasm -

Tải xuống mã WASM và sử dụng nó để kiểm tra api.

Thí dụ

<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>

Đầu ra

Bạn sẽ nhận được kết quả sau:

Các đối tượng xuất có tham chiếu đến hàm được gọi. Để gọi hàm vuông, bạn sẽ phải thực hiện như sau:

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

Vấn đề với mã biên dịch WASM

Sau đây là các vấn đề với mã biên dịch WASM -

  • Rất khó để kiểm tra, nếu có bất kỳ mã độc hại nào được chèn vào, trong khi biên dịch mã thành wasm. Hiện tại không có công cụ nào để xác thực mã.

  • Wasm rất khó phân tích và mã lỗi / mã độc có thể dễ dàng thực thi bên trong trình duyệt.