2016-12-30 11 views
0

免責事項:質問の古いバージョンは、SecurityManagerAccessControllerを混同していました。しかし、今私は間違いを犯したことを知っており、問題は洗練されています。AccessControllerが非特権アクセスをブロックしていない理由

茎はかなりストレートです。私はいくつかのScriptEngineでスクリプトができることを制限する方法を探しています。

私はいくつかの同様の質問、古いと新しいを読んだ。 ClassFilterというクラスを使用したNashornScriptEngineの解決策があるようです。しかし、私は、スクリプトエンジンの実装に関係なく一般的な方法を探しています。いくつかは、JavaのAccessControllerが方法であることを示唆しています。

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("nashorn"); 

Permissions perms = new Permissions(); 
ProtectionDomain domain = new ProtectionDomain(new CodeSource(null, (Certificate[]) null), perms); 
AccessControlContext acc = new AccessControlContext(new ProtectionDomain[] { domain }); 

AccessController.doPrivileged(new PrivilegedAction() { 
    @Override 
    public Object run() { 
     try { 
      //I want the following line to throw a SecurityException 
      return engine.eval("var System = Java.type('java.lang.System'); print(System.getProperty('java.home'));"); 
     } 
     catch (ScriptException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    }}, 
    acc 
); 

//At the same time I want the following line to work 
System.out.println(System.getProperty("java.home")); 

そして関与なしAccessControllerのはありませんかのようにスクリプトが実行されます。だから私は、これまでのところ、私はこれを持って、読んで、AccessControllerと遊ぶために始めました!

私の質問です。これを行う方法はAccessControllerですか?それがあれば、どうすればいいのですか?

+0

確実に行う方法ですが、コードにSecurityManagerが登録されていないと表示されます –

+0

このコードを修正する方法を教えてください。私は何が間違っているのか分からない。もう1つ、私のアプリケーションの残りの部分はそのままです。言い換えれば、SecurityManagerを適用したいのは、アプリケーションの残りの部分ではなく、 'engine.eval'行です。ありがとう。 – Mehran

答えて

0

私はここで問題を解決することができました。もう少し読んだ後、SecurityManagerが有効になっていないと、AccessControllerは効果がないことがわかりました。そして、ここであなたはそれをアクティブ方法は次のとおりです。 grant { permission java.security.AllPermission; };

これを以下の内容で、プロジェクトのルートフォルダにsecurity.policyファイルを作成します-Djava.security.manager -Djava.security.policy=security.policy

    1. 2つのVMオプションを追加します。プロジェクトのSecurityManagerが有効になり、すべての権限が付与されます。言い換えれば、それはちょうどSecurityManagerを有効にしますが、あなたのコードは以前と同じように動作します。これで、上記のコードを使用してアプリケーションのアクセス制御の一部を制御できるようになりました。

  • 関連する問題