JavaScriptのSandboxing技術
from 2022/02/09
JavaScriptのSandboxing技術っていまどうなっているんだっけ?とふと気になったinajob.icon
利用者にJavaScriptを投稿してもらうみたいな時に安全に実行したい
もっというと上のエディタコンポーネントのロジックをユーザ投稿型にしてみたいが、安全に実行する方法が知りたい
ロジックの実行のトリガは決め打ちのインターフェースにして、処理をWeb Workerで閉じ込めるとかそういうのを考えたが
どうもCookieやIndexedDBに触れてしまうらしい・・
Web Workerはサンドボックス用のものではない
https://zenn.dev/stomita/articles/2c16a53223f3c9 に全部書いてありましたtakker.icon
みます🙏inajob.icon
QuickJS-ecmascriptenがよさそうtakker.icon
速度は(wasmの仕様上JIT化ができないので)あまり期待できないかもbsahd.icon
現状ほぼ確実なのは「別のサブドメインにしたiframe内にコードを配置する」
ブラウザ側のJITが無効なら...
二重にインタプリタするのですごく遅くなる
quickjsはemscriptenでjsで動く?
wasm非対応環境を考慮する
partytown...
xhrかぁ
パケット組み立てとかオーバーヘッドありそう
モダンなJavaScriptに慣れ親しんだ我々にとってはとても「レガシー」でかつ積極的な活用は忌避すべきとされている 「同期的なXMLHttpRequest呼び出し」 と、Workerよりはまだ環境制約は多いが同じくモダンなWeb標準である 「Service Worker」 を使って解決したところが大変おもしろい
ヤバいのがきたなwnishio.icon
ただ、OS内のパケットキュー、(OS内の)ネットワークデバイスを経由したりするのがネックかなbsahd.icon
同期と非同期のリクエスト - Web API | MDN
XMLHttpRequest は同期と非同期通信の両方に対応しています。しかし、一般的には性能上の理由により、同期リクエストより非同期リクエストを選択すべきです。
同期リクエストが通常、実行をブロックしない稀な例として、 Worker 内での XMLHttpRequest の利用があります。
JavaScript.icon