6

開発者がカスタムのGroovyスクリプトとフリーマーカーテンプレートをアップロードできるようにするシステムを開発しています。

デフォルトのJavaセキュリティインフラストラクチャを使用して、非常に高いレベルで特定のレベルのセキュリティを提供できます。つまり、コードがファイルシステムまたはネットワークにアクセスできないようにしますが、特定のメソッドへのアクセスを制限する必要があります。

私の計画は、GroovyおよびFreemarkerランタイムを変更して、特定のメソッドをホワイトリストまたはブラックリストに登録するアノテーションを読み取ることでしたが、これにより、コードのフォークバージョンを維持する必要があります。これは望ましくありません。

基本的にできる必要があるのは、GroovyまたはFreemarkerから呼び出されたときに特定のメソッドが実行されないようにすることだけです。コールスタックを調べるハックを検討しましたが、これは大規模なスピードヒットになります(そしてそれはかなり厄介です)。

これを実装するための他のアイデアはありますか?

4

4 に答える 4

5

これを行うには、GroovyClassLoader をサブクラス化し、AST ビジター内で制約を適用します。この投稿では、その方法について説明しています: http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html

また、そこで参照されているコードは、Groovy 1.6 インストーラーのサンプル フォルダーにあります。

于 2009-04-09T15:43:13.213 に答える
3

kohsukeのプロジェクトgroovy-sandboxをご覧ください。このトピックに関する彼のブログ投稿も参照してください。解決策は、サンドボックス化ですが、パフォーマンスの欠点です。

于 2012-05-22T12:19:42.493 に答える
2

OSGi はこれに最適です。コードをバンドルに分割し、各バンドルが公開するものと、他のバンドルに公開するものを正確に設定できます。それはあなたのために働くでしょうか?

于 2009-04-08T04:59:35.710 に答える
1

java-sandbox ( http://blog.datenwerke.net/p/the-java-sandbox.html ) は最近開発されたライブラリであり、Java 内から信頼されていないコードを安全に実行できると考えることもできます。

参照: http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html

于 2013-05-31T14:50:15.547 に答える