簡體   English   中英

Jython:禁止訪問Java類並更改輸出流

[英]Jython: Block access to java classes & Change output stream

我希望在正在處理的Java項目中使用Jython。 我想知道兩件事。

  1. 我可以禁止從Python腳本訪問Java類。 IE瀏覽器 阻止腳本能夠執行from java.util import Date

  2. 是否可以更改print "Hello"等內容寫入的輸出流,以便可以重定向實現的腳本輸出?

還是我必須編輯實際的Jython類才能禁用和更改它?

為了限制對特定Java類的訪問,您可以實現一個自定義類加載器,並將其注冊到Jython:

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

如果由於安全問題(不允許在運行用戶代碼的服務器上執行某些操作)而這樣做,則必須注意Jython還提供了內置的函數實現,這些實現不會被類加載器捕獲:

內置Python函數實現

另一種方法是分析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);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM