小编Arn*_*ach的帖子

保护字段免受反射 - System.security的奇怪情况

我目前正在研究java安全性并遇到了一个奇怪的现象.java中的SecurityManager存储在java.lang.System中的"security"字段中.有趣的是,该领域似乎受到反射访问的保护,这确实有意义,但据我所知,这个领域是唯一的.所以这是一个例子:

for(Field f : System.class.getDeclaredFields())
    System.out.println(f);
Run Code Online (Sandbox Code Playgroud)

输出

public static final java.io.InputStream java.lang.System.in
public static final java.io.PrintStream java.lang.System.out
public static final java.io.PrintStream java.lang.System.err
private static volatile java.io.Console java.lang.System.cons
private static java.util.Properties java.lang.System.props
private static java.lang.String java.lang.System.lineSeparator
Run Code Online (Sandbox Code Playgroud)

有趣的是:该领域被宣布为

private static volatile SecurityManager security = null;
Run Code Online (Sandbox Code Playgroud)

不在列表中,肯定是打电话给

System.class.getDeclaredField("security"); 
Run Code Online (Sandbox Code Playgroud)

产生NoSuchFieldException.因为我在网上找不到任何关于这个的信息,我很确定这个字段曾经可以通过反思访问(例如,参见2010年的博客文章,描述访问该字段)我想知道a)是否已实现作为快速修复,以防止通过反射轻松禁用安全管理器和b)如何实现(或者更确切地说,有任何机会保护其他私有字段免受反射).

java security reflection

8
推荐指数
1
解决办法
1209
查看次数

Java:监控Locks的收购

我目前正在尝试使用java的安全机制,以了解如何在沙盒中最好地执行不受信任的代码.您要防范的一件事是无限循环,这就是为什么理想情况下您希望在自己的线程中运行不受信任的代码.当然,现在,恶意代码可能会做一些繁重的处理,导致挂起的线程.要摆脱这个线程本质上唯一的方法是使用java的弃用的Thread.stop()机制.这是有问题的主要原因是线程保持的所有锁都被释放,这可能导致对象损坏.

问题是:使用Java的SecurityManager和自定义类加载器,我能够跟踪,例如,可以加载哪些类以及可以访问哪些系统资源.有没有办法通知(并可能禁止)代码获取锁(例如,定义在当前线程进入同步块之前通知的回调).

java sandbox securitymanager

5
推荐指数
1
解决办法
134
查看次数

标签 统计

java ×2

reflection ×1

sandbox ×1

security ×1

securitymanager ×1