[英]Jython: Block access to java classes & Change output stream
我希望在正在處理的Java項目中使用Jython。 我想知道兩件事。
我可以禁止從Python腳本訪問Java類。 IE瀏覽器 阻止腳本能夠執行from java.util import Date
?
是否可以更改print "Hello"
等內容寫入的輸出流,以便可以重定向實現的腳本輸出?
還是我必須編輯實際的Jython類才能禁用和更改它?
為了限制對特定Java類的訪問,您可以實現一個自定義類加載器,並將其注冊到Jython:
this.pyInterpreter.getSystemState().setClassLoader(this.userCodeClassLoader);
如果由於安全問題(不允許在運行用戶代碼的服務器上執行某些操作)而這樣做,則必須注意Jython還提供了內置的函數實現,這些實現不會被類加載器捕獲:
另一種方法是分析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.