[英]Execute a method in Java with restricted permissions
有沒有什么辦法可以使用AccessController.doPrivileged
和新的AccessControlContext
來限制對類/方法的訪問? 我想有一個子程序可以調用不受信任的代碼而無需訪問觸摸文件系統或打開套接字。
具體用例是允許最終用戶提供可以使用有限權限執行的代碼或腳本片段(例如,Javascript或Groovy)。
我正在尋找的是類似普通安全策略文件的東西,其范圍限於用戶提供的代碼而不是整個JVM。
我現在不關於AccessController方式。 但是,您可以使用以下方案控制情況。 您將需要具有多個類加載器:首先將按原樣加載類。 第二個(或理想的不受信任的代碼源計數),它將類轉換為修補或提供而不是普通類的特殊修補版本。 最后是System Classloader,它實際上會執行例程。
另外不要忘記保護Classloader.getSystemClassLoader。 對於轉換對象,您可以使用java reflection API或objectweb asm library。
Java-Sandbox就是這樣的工具。 它可用於僅允許訪問受限制方法的一組列入白名單的類和資源。 它使用具有自定義類加載器和安全管理器的系統來實現此目的。 不需要字節代碼操作或類似的技巧。
我沒有使用它,但它看起來設計得很好,而且記錄得很好。
來自其網站的示例代碼:
class Untrusted extends SandboxedEnvironment<Object>() {
@Override
public Object execute() {
/* untrusted code */
return null;
}
};
service.runSandboxed(Untrusted.class, context);
如果這是你正在尋找的東西
@PreAuthorize("hasRole('ROLE_USER')")
public void create(Contact contact);
您可能想看看Spring Security, 基於表達式的訪問控制
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.