Java アプリケーションがあり、組み込みの Javascript インタープリター (javax.script.*) を使用して信頼できないコードを実行したいと考えています。
ただし、デフォルトでは、インタープリターは任意の Java クラスへのアクセスを許可します。たとえばjava.lang.System.exit(0)
、スクリプト内の " " は JVM をシャットダウンします。これは「Live Connect」と呼ばれていると思います。詳細については、Sun の「Java Scripting Programmer's Guide」を参照してください。
スクリプトが Java クラスにアクセスする機能をどうにかして無効にしたいと考えています。つまり、 のeval()
またはput()
メソッドを使用して具体的に挿入したオブジェクトにのみスクリプトがアクセスできるようにしたいと考えていますScriptEngine
。
古いスタンドアロン バージョンのインタープリター ( Rhino ) でこれを実現する方法に関するドキュメントをいくつか見つけました。
ただし、ClassShutter などはすべて内部でセットアップされ、パブリック メソッドでオーバーライドできないため、sun 内部クラスを使用せずにこのアプローチを JDK 1.6 で行うことはできません。
カスタムSecurityManager、ClassLoaderなどを使用して複雑なフープをジャンプする必要がない、これを回避する簡単な方法があることを願っていますが、何も見つけることができませんでした.
さまざまなアプリケーションで Javascript を取り巻くセキュリティ速報が頻繁に出ていることから、Live Connect を無効にするための簡単なフラグが用意されていることは想像に難くありません。