我正在運行一些未經驗證的腳本(用尚未確定的語言編寫,但需要基於Java,所以JRuby,Groovy,Jython,BeanShell等都是候選人)。我希望這些腳本能夠做一些事情,並限制做其他事情。使用Java腳本編寫的安全性(JRuby,Jython,Groovy,BeanShell等)
通常,我只是去使用Java的SecurityManager並完成它。這很簡單,讓我限制文件和網絡訪問,關閉JVM的能力等等。這對於我想阻止的高層次的東西來說很好。
但有一些東西我想允許,但只能通過我提供的自定義API /庫。例如,我不想允許直接網絡訪問來打開yahoo.com的URLConnection,但如果使用MyURLConnection完成操作,則可以。那就是 - 我想要允許的一組方法/類,然後我想要禁止其他任何方法。
我不相信這種類型的安全性可以用標準的Java安全模型完成,但也許可以。我對腳本語言本身的性能或靈活性沒有具體的要求(腳本將通過基本的循環/分支對我的API進行簡單的程序調用)。所以,即使是每次反射電話都檢查安全檢查的「大」開銷也沒有問題。
對此提出建議?
謝謝 - 這真的很有幫助。順便說一句 - 我的使用案例是允許人們上傳腳本,以便他們的負載測試在http://browsermob.com上運行。我沒有看過Rhino,但只要它不允許像Groovy那樣直接訪問Java API,就好像它可以工作。 – 2009-02-09 21:35:45
是的 - 你有更多的控制權,從安全角度來看這是很好的。您可能必須爲某些API創建包裝,然後公開這些對象。例如,我們有一個工作流引擎,並創建了一個工作流對象,然後我們可以使用JavaScript來控制您可以執行的操作。 – 2009-02-09 21:41:14