Vm2: ブラウザでのvm2の実行のサポート

作成日 2017年07月31日  ·  15コメント  ·  ソース: patriksimek/vm2

ブランチ: https
ライブラリ: https

使用法

<script src="vm2.js"></script>
<script>
    const vm = new vm2.VM();
    alert(vm.run('Math.random()'));
</script>

問題

  • サンドボックスはwindow.top介してエスケープできます。

TODO

  • ブラウザのバージョンからNodeVMを削除します。
  • ブラウザ関連機能を備えたブラウザバージョンにBrowserVMを追加します。
  • 自動化されたブラウザテスト。
feature request help wanted

最も参考になるコメント

Webワーカーを使用してvm2をブラウザーで動作させることを考えています。 試してみます。

全てのコメント15件

ややハッキーな解決策には、各プロパティアクセスを手動でラップするASTの書き換えが含まれる可能性があります。 たとえば、 let x = foo.barlet x = (x => (x == window.top) ? (some patch here) : x)(foo.bar)書き換えられます。

ここでは、関数呼び出しノードは同じノードに包まれている書き換えAST、の一例である。この

このアプローチの欠点は、書き直されたコードを簡単にデバッグできないことと、関数や評価などを処理するためにいくつかの回避策が必要になることです。

基本的にJSを自分で解釈するか、関数の構造をカスタム実装(変数の挿入やコンテンツの解析など)に置き換えるという非常に重い方法しかないと思います。 この方法を実装するのは非常に困難です。

documenttopような変数は削除も上書きもできないため、変数の削除は不可能です。

@ io4 、実行時のFunction、evalなどの置き換えは、ASTの書き換えで確かに可能であり、それほど難しいことでもありません。 ただし、すべての関数呼び出しを文字通り書き直す必要があるため、「コンパイル時」と、関数呼び出しが1層の間接参照を通過する必要があるため、実行時に、パフォーマンスに大きな打撃を与えます。

この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 貢献していただきありがとうございます。

閉じないでください。これは関連する問題です。

Webワーカーを使用してvm2をブラウザーで動作させることを考えています。 試してみます。

サンドボックス化されたiframe内に配置することもできます。 そうすれば、エスケープしてもフレームに制限され、トップレベルのブラウジングコンテキストをナビゲートできません。

ステータスは、Webワーカーがホストとメモリを共有していないため、使用できません。 サンドボックス化されたiframeをテストしていましたが、そこでも成功しませんでした。 allow-same-originオプションがないと、vm2は起動しません。 このオプションを有効にすると、トップレベルウィンドウにアクセスできます。 しかし、私はあきらめていません:)

どのようなエラーが発生しましたか? 変数にアクセスする必要がありましたか? ライブラリがありませんでしたか? iframe間でメッセージを交換することで取得できるデータはありますか?

特にレルムがブラウザのサンドボックス化のために特別に言及されたので、227は興味深いものです。

私はrealms-shimと同じトリックでウィンドウへのアクセスを修正しようとしました。
実装はここで見つけることができます: https
欠点は、VM内のすべてが厳密モードで実行されることです。

@patriksimekは、 window.top問題を回避するために、オブジェクトを監視して、変更/使用した場合にスクリプトを強制終了(スローおよびエラー)できませんでしたか? したがって、プロパティを観察し、関数をラップします

ブランチ: https
ライブラリ: https

使用法

<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;を追加しました。

このページは役に立ちましたか?
0 / 5 - 0 評価