1

私が取り組んでいる Java プロジェクトで Jython を使用しようとしています。で、2点気になります。

  1. Python スクリプトから Java クラスへのアクセスを無効にすることはできますか? すなわち。スクリプトが次のようなことを実行できないようにしfrom java.util import Dateますか?

  2. print "Hello"また、実装用のスクリプト出力をリダイレクトできるように、etc が書き込む出力ストリームを変更できますか?

または、これを無効にして変更するには、実際の Jython クラスを編集する必要がありますか?

4

2 に答える 2

0

追加のアプローチの 1 つは、Python 解析ツリーですべてのインポートを分析することです。複数のセキュリティ対策を講じたほうがよいと思います。

   String code = "import sys\n"+"from java.io import File\n"+"sys.exit()";
   AnalyzingParser anPar = new  AnalyzingParser(new ANTLRStringStream(code), "", "ascii");

   mod tree=anPar.parseModule();
   Visitor vis = new Visitor() {
       @Override
       public Object visitImport(Import node) throws Exception {
          System.out.println(node);
                       return node;
       }

       @Override
       public Object visitImportFrom(ImportFrom node) throws Exception {
          System.out.println(node);
                       return node;
       }
         };
   List<PythonTree> children=tree.getChildren();
   for (PythonTree c : children){
         vis.visit(c);
   }
于 2013-06-05T06:00:40.543 に答える
0

特定の Java クラスへのアクセスを制限するには、カスタム クラス ローダーを実装して Jython に登録します。

this.pyInterpreter.getSystemState().setClassLoader(this.userCodeClassLoader);

セキュリティ上の問題 (ユーザー コードを実行するサーバー マシンでの一部のアクションを許可しない) のためにこれを行う場合、Jython はクラス ローダーによって捕捉されない組み込み関数の実装も提供することに注意する必要があります。

組み込みの Python 関数の実装

于 2013-04-20T14:39:15.927 に答える