WebAssembly - bezpieczeństwo
Zgodnie z oficjalną witryną WebAssembly.org, która jest dostępna pod adresem https://webassembly.org/docs/security/ głównym celem WebAssembly w zakresie bezpieczeństwa jest -
Model bezpieczeństwa WebAssembly ma dwa ważne cele -
Chroń użytkowników przed błędnymi lub złośliwymi modułami oraz
Zapewnij programistom przydatne prymitywy i środki zaradcze do tworzenia bezpiecznych aplikacji, w ramach ograniczeń (1).
Skompilowany kod, tj. WASM z C / C ++ / Rust, nie jest wykonywany bezpośrednio w przeglądarce i korzysta z API JavaScript. Kod WASM jest umieszczony w piaskownicy, tj. Wykonywany przez opakowanie JavaScript API, a przeglądarka komunikuje się z WASM za pomocą API.
Oto przykład użycia pliku .wasm w przeglądarce.
Przykład - C Program
#include<stdio.h>
int square(int n) {
return n*n;
}
Skorzystamy z eksploratora WASM, aby pobrać kod WASM -
Pobierz kod WASM i użyj go do przetestowania API.
Przykład
<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>
Wynik
Otrzymasz następujący wynik -
Obiekty eksportu mają odniesienie do wywoływanej funkcji. Aby wywołać kwadrat funkcyjny, będziesz musiał zrobić to w następujący sposób -
console.log(finalcode.instance.exports.square(25));
Problemy ze skompilowanym kodem WASM
Poniżej przedstawiono problemy ze skompilowanym kodem WASM -
Trudno jest sprawdzić, czy nie został wstawiony jakiś złośliwy kod podczas kompilacji kodu do wasm. W tej chwili nie ma dostępnych narzędzi do weryfikacji kodu.
Wasm jest trudny do przeanalizowania, a błędny / złośliwy kod można łatwo uruchomić w przeglądarce.