- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设法用以下代码设置了一个“ Java沙箱”:
// #1
new File("xxx").exists();
// #2
PrivilegedExceptionAction<Boolean> untrusted = () -> new File("xxx").exists();
untrusted.run();
// #3
Policy.setPolicy(new Policy() {
@Override public boolean implies(ProtectionDomain domain, Permission permission) { return true; }
});
System.setSecurityManager(new SecurityManager());
AccessControlContext noPermissionsAccessControlContext;
{
Permissions noPermissions = new Permissions();
noPermissions.setReadOnly();
noPermissionsAccessControlContext = new AccessControlContext(
new ProtectionDomain[] { new ProtectionDomain(null, noPermissions) }
);
}
AccessControlContext allPermissionsAccessControlContext;
{
Permissions allPermissions = new Permissions();
allPermissions.add(new AllPermission());
allPermissions.setReadOnly();
allPermissionsAccessControlContext = new AccessControlContext(
new ProtectionDomain[] { new ProtectionDomain(null, allPermissions) }
);
}
// #4
try {
AccessController.doPrivileged(untrusted, noPermissionsAccessControlContext);
throw new AssertionError("AccessControlException expected");
} catch (AccessControlException ace) {
;
}
// #5
PrivilegedExceptionAction<Boolean> evil = () -> {
return AccessController.doPrivileged(untrusted, allPermissionsAccessControlContext);
};
try {
AccessController.doPrivileged(evil, noPermissionsAccessControlContext);
throw new AssertionError("AccessControlException expected"); // Line #69
} catch (AccessControlException ace) {
;
}
Policy
(否则我们将立即锁定自己),然后设置系统
SecurityManager
。
AccessControlContext
中执行“不受信任”的代码,这将导致我想要的
AccessControlException
。精细。
AccessControlContext
,并在其中运行不受信任的代码。我希望这也会抛出
AccessControlException
,因为邪恶的代码成功地离开了沙箱,但事实并非如此:
Exception in thread "main" java.lang.AssertionError: AccessControlException expected
at sbtest.Demo.main(Demo.java:69)
doPrivileged
public static <T> T doPrivileged(PrivilegedExceptionAction<T> action, AccessControlContext context)
throws PrivilegedActionException
Performs the specified PrivilegedExceptionAction with privileges enabled and restricted by the
specified AccessControlContext. The action is performed with the intersection of the the permissions
possessed by the caller's protection domain, and those possessed by the domains represented by the
specified AccessControlContext.
If the action's run method throws an unchecked exception, it will propagate through this method.
Parameters:
action - the action to be performed
context - an access control context representing the restriction to be applied to the caller's
domain's privileges before performing the specified action. If the context is null,
then no additional restriction is applied.
Returns:
the value returned by the action's run method
Throws:
PrivilegedActionException - if the specified action's run method threw a checked exception
NullPointerException - if the action is null
See Also:
doPrivileged(PrivilegedAction), doPrivileged(PrivilegedExceptionAction,AccessControlContext)
AccessControlException
,但是不会发生。
最佳答案
好吧,不受信任的代码最初不会在没有权限的情况下执行...直到它请求恢复权限(使用doPrivileged
AllPermission
嵌套AccessControlContext
调用)。该请求得到了满足,因为根据您的Policy
,您的所有代码(包括“邪恶”操作)都具有完全特权。否则,doPrivileged
不是“按需沙箱工具”。它仅用作其直接调用方在策略决策点(ClassLoader
+ SecurityManager
/ Policy
)已授予它的权限范围内限制或增加其特权的一种方法。线下的主叫方绝对可以自由地“还原”更改的权限,再次根据策略决策点,而不是先前任何主叫方的意见。因此,这是预期的行为,而不是安全漏洞。
有什么解决方法?
首先,肯定有一种使用基础架构的“规范” /理智的方法。根据最佳实践,应通过打包和类加载器将受信任的代码与不受信任的代码隔离,从而使二者与可以单独授权的不同域相关联。如果仅对不信任的代码授予了读取特定文件系统目录的权限,则没有多少doPrivileged
调用将使它无法打开URL连接。
除此之外,当然可以提出一百零二种选择(创造性地(但不一定安全地)利用基础架构的不同移动部分以发挥其优势)。例如,Here我曾建议过一个带有线程本地的自定义保护域,以大致完成您想要的操作,即在执行不可信操作的过程中按需对普通特权域进行沙箱处理。
关于java - 使用AccessController.doPrivileged()限制权限并不总是按预期方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59321958/
我试图弄清楚一些遗留代码在做什么。这条线到底在做什么,为什么我需要这种方式? String lineSeparator = (String) java.security.AccessControlle
我尝试通过 checkPermission() 方法获取目录权限,如代码中所示。 private static boolean dirPermissions(String dir, String pe
确实,在(签名的)小程序中,只有当我的小程序与 JavaScript 通信时,我才需要使用 AccessController.doPrivileged() ? 最佳答案 没有。如果不受信任的小程序访问
我有这段代码,将 JavaServer 附加到 RMIRegistry,这是在 PrivilegedAction 中完成的 //start javaengineserver
如何检查应用程序是否有权读取或写入文件系统上的特定目录。我正在尝试这个: try { AccessController.checkPermission(new FilePermission(f
我可以尝试简单的代码。 我有一个 AccessController,它有 behaviors(): class AccessController extends BackendController {
我正在尝试了解Java的权限模型。我尝试了这个示例代码: public static void main(String[] args) { File file = new File("/etc/p
我的 ssl 服务器上有一个后端项目,例如 ssl.mybackend.com,包含以下内容: class FormController extends Controller { public
上下文 我正在编写一个 Java 系统,其中的代码在非常严格的沙箱中执行。一个查询(由一个或多个类组成)在执行期间只允许访问一个文件夹(以及文件夹中包含的子文件夹和文件)。 我通过使用 Securit
如果我理解 AccessController.doPrivileged正确地说,不受信任的代码应该能够通过确实具有权限的中间方法调用需要权限的方法(例如System.getProperty())。 p
我无法找出或找出如何使用PHP permission="allowed"从此xml解析simplexml_load_file值。 基本结构是 如何获得最后一行上permission
我在grail应用程序中使用了shiro security。 Grails版本:2.2.1 四郎:1.2.0 我在为启用了过滤器的 Controller 编写grails单元测试用例时遇到问题。当测试
我是 Java 安全方面的新手;有一个基本问题。 我目前的理解是: 每当您需要限制不受信任的代码可以执行的操作时,实现此目的的方法之一是使用自定义安全策略,并在 Subject.doAsPrivile
我有 this xml file 我正在尝试访问PHP中的标记permission中的yt:accessControl属性值 echo (string)$xmlyt->entry->children(
我最近扩展了 CWebUser 类,现在它有这样有用的方法: Yii::app()->user->isAdmin; Yii::app()->user->isTeacher; Yii::app()->u
我想动态下载类;下面我编写了相同的代码。 public class ClientProg { public static void main(String[] args) throws Cla
我试图禁止在 AccessController.doPriviliged() 方法中创建线程。下面的方法创建并运行线程。我用 -Djava.security.manager 运行它。根据此链接,如果未
我在小程序中有以下通过 JavaScript 调用的方法 public String getAString() { Object rc = AccessController.d
我正在弄清楚如何在没有权限的情况下运行外部代码(来自不同的 JAR),这样它就不会损害我自己的系统。我几乎可以正常工作了,但是我发现了一个奇怪的情况,即调用 System.exit(0) 仍然会杀死整
我正在为管理多种数据备份的内部软件开发小规模部署系统。部分任务是备份某些文件夹,我想备份应用于这些文件夹的 ACL,以便在恢复时文件仍能按预期工作。 制作一些代码的原型(prototype),我曾尝试
我是一名优秀的程序员,十分优秀!