そのため、私は groovy を使用してアプリケーション スクリプト インターフェイスを実装していますが、これらはかなり厳格なセキュリティ要件です。
コンパイル時に、ホワイト リストとブラック リストの長いリストと式チェッカーを使用して SecureASTCustomizer を使用し、最初からコンパイルしたくないものがないことを確認します。
ただし、コンパイルされたスクリプトは、理論的には変更可能な永続ストアに格納されます。
そのため、コンパイルされたスクリプトを実行する前に確認する必要があります。現時点では、invokeMethod を介した各パスをチェックするカスタム MetaClassImpl を返す MetaClassCreationHandle のインスタンスで処理しています。
ただし、これによりパフォーマンスのオーバーヘッドが発生します。
スクリプトがインスタンス化されると、"Script".$callSiteArray が invokestatic "Script".$getCallSiteArray() の結果に設定されます。
そのメソッドを自分で呼び出す方法、または構築された呼び出しサイト配列を利用できるようにして、それを調べて同じ種類のチェックを行う方法はありますか? それとも、グルーヴィーな CallSites に十分な情報がありませんか?
Groovy のバージョンは (残念ながら) 2.1.6 に修正されています