2013-04-08 10 views
9

私が使用できる方法はありますか?AccessControlContextからまではクラス/メソッドへのアクセスを制限しますか?私は、ファイルシステムやオープンソケットに触れることなく、信頼できないコードを呼び出すことができるサブルーチンを用意したいと思っています。制限付きのアクセス許可を持つJavaでメソッドを実行する

特定の使用例は、エンドユーザーが制限付きの権限で実行できるコードまたはスクリプト(JavascriptやGroovyなど)の断片を提供できるようにすることです。

私が探しているのは、通常のセキュリティポリシーファイルのようなもので、JVM全体ではなくユーザー提供のコードに限定されています。

+0

バンプ!あなたはこれについてもっと何かを見つけましたか? – Lii

答えて

1

私は今AccessControllerの方法についてはありません。しかし、おそらくあなたは以下のスキームを使って状況を制御することができます。 複数のクラスローダーが必要です: は最初にクラスをそのままロードします。 クラスをパッチに変換するか、通常のクラスの代わりに特別なパッチを適用する第2の(または理想的には信頼できないコードソースの数で)。 そして実際にルーチンを実行するSystem Classloaderのために最後に。

また、Classloader.getSystemClassLoaderを保護することを忘れないでください。 オブジェクトの変換には、JavaリフレクションAPIまたはobjectweb asmライブラリを使用することができます。

+0

ClassLoaderは正しい軌道上にあるようです。クラスの直接変換には興味がありません。 – wrschneider

+0

なぜですか?それは最も単純で分かりやすい方法のように見えます。 – cdkrot

+0

これはあなたのニーズに合っていますか? [リンク](http://stackoverflow.com/questions/17045334/restrict-execution-of-a-method-with-java-annotations?rq=1) – cdkrot

0

これは何か、あなたが

@PreAuthorize("hasRole('ROLE_USER')") 
public void create(Contact contact); 
あなたは春のセキュリティ上の見てみたいことがあります

を探しているの場合は、Expression-Based Access Control

+0

いいえ、私は誰がメソッドを実行できるのか探していません - 私はメソッド自体が一度実行することができるものを探しています。 – wrschneider

1

Java-Sandboxは、まさにこのためのツールです。これは、制限されたメソッドのためのホワイトリストのクラスとリソースのセットへのアクセスだけを許可するために使用できます。これは、カスタムクラスローダとセキュリティマネージャを備えたシステムを使用してこれを実現します。バイトコードの操作やそれに類するトリックは必要ありません。

私はそれを使用していませんが、うまく設計され、合理的に文書化されています。そのウェブサイトから

例コード:

class Untrusted extends SandboxedEnvironment<Object>() { 
    @Override 
    public Object execute() { 
     /* untrusted code */ 
     return null; 
    } 
}; 

service.runSandboxed(Untrusted.class, context); 
関連する問題