基本的にJSを自分で解釈するか、関数の構造をカスタム実装(変数の挿入やコンテンツの解析など)に置き換えるという非常に重い方法しかないと思います。 この方法を実装するのは非常に困難です。
document
やtop
ような変数は削除も上書きもできないため、変数の削除は不可能です。
@ io4 、実行時のFunction、evalなどの置き換えは、ASTの書き換えで確かに可能であり、それほど難しいことでもありません。 ただし、すべての関数呼び出しを文字通り書き直す必要があるため、「コンパイル時」と、関数呼び出しが1層の間接参照を通過する必要があるため、実行時に、パフォーマンスに大きな打撃を与えます。
この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 貢献していただきありがとうございます。
閉じないでください。これは関連する問題です。
Webワーカーを使用してvm2をブラウザーで動作させることを考えています。 試してみます。
サンドボックス化されたiframe内に配置することもできます。 そうすれば、エスケープしてもフレームに制限され、トップレベルのブラウジングコンテキストをナビゲートできません。
ステータスは、Webワーカーがホストとメモリを共有していないため、使用できません。 サンドボックス化されたiframeをテストしていましたが、そこでも成功しませんでした。 allow-same-origin
オプションがないと、vm2は起動しません。 このオプションを有効にすると、トップレベルウィンドウにアクセスできます。 しかし、私はあきらめていません:)
どのようなエラーが発生しましたか? 変数にアクセスする必要がありましたか? ライブラリがありませんでしたか? iframe間でメッセージを交換することで取得できるデータはありますか?
私はrealms-shimと同じトリックでウィンドウへのアクセスを修正しようとしました。
実装はここで見つけることができます: https :
欠点は、VM内のすべてが厳密モードで実行されることです。
@patriksimekは、 window.top
問題を回避するために、オブジェクトを監視して、変更/使用した場合にスクリプトを強制終了(スローおよびエラー)できませんでしたか? したがって、プロパティを観察し、関数をラップします
使用法
<script src="vm2.js"></script> <script> const vm = new vm2.VM(); alert(vm.run('Math.random()')); </script>
問題
- サンドボックスは
window.top
介してエスケープできます。TODO
- ブラウザのバージョンから
NodeVM
を削除します。- ブラウザ関連機能を備えたブラウザバージョンに
BrowserVM
を追加します。- 自動化されたブラウザテスト。
window
またはwindow.top
を、何かが起こる前に投げることができる方法で観察する方法がわかりません。
こんにちは
vm2.jsをモジュールとしてtypescriptファイルにインポートする必要があります。
誰か助けてもらえますか? ありがとうございました
こんにちは
vm2.jsをモジュールとしてtypescriptファイルにインポートする必要があります。
誰か助けてもらえますか? ありがとうございました
モジュールとしての作業:ファイルの最後にmodule.exports = vm2;
を追加しました。
最も参考になるコメント
Webワーカーを使用してvm2をブラウザーで動作させることを考えています。 試してみます。