Sab*_*han 10 java java-security
我正在浏览这个链接,OBJ10-J.不要使用公共静态非最终字段,它说,
客户端代码可以简单地访问公共静态字段,因为安全管理器不会检查对这些字段的访问.
那是什么意思呢?即逃离安全经理他们是什么意思?
如果他们只是意味着它,因为现场被非最终和public
,然后怎么来的非最终,public
实例字段比他们不同static
的同行?(就代码安全而言)
我已经经历过这个问题并且在安全方面没有看到任何提及,为什么静态变量被认为是邪恶的
public
class的public static
字段可以从任何地方访问,所以public
实例字段也可以访问,那么区别在哪里?为什么非最终 public
实例字段不是安全问题,而是存在static
?
为什么非最终公共实例字段不是安全问题,而静态才是安全问题?
如果要访问实例字段,则需要对该对象实例的引用。如果您没有参考,则无法访问它。
因此您的代码可以控制引用传递给哪些对象。如果恶意代码尝试使用反射来劫持您的某个对象以获取引用,您可以安装安全管理器来防止这种情况发生。
另一方面,public static
有权访问该类的每个人都可以访问字段,因为该Class
对象是可访问的。所以恶意代码可能只会使用
YourClass.PUBLIC_INSTANCE_FIELD = someValue;
Run Code Online (Sandbox Code Playgroud)
或者反射方式
Class clazz = Class.forName("YourClass");
Field publicStaticField = clazz.getDeclaredField("PUBLIC_INSTANCE_FIELD");
publicStaticField.set(null, someValue);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
461 次 |
最近记录: |