Java安全性
本文是读《Insight the Java Virtual Machine》第三章《安全性》的笔记。
也记录了一些自己的问题,请高手们如果知道答案,不吝指教,不胜感激!
1. Aside from platform independence, the other major technical challenge a network-oriented software technology must deal with is security.
--面向网络软件技术的挑战只有“平台独立”和“安全性”吗?
2. The sandbox for untrusted Java applets, for example, prohibits many activities, including:
a) reading or writing to the local disk,
b) making a network connection to any but the host from which the applet came,
c) creating a new process, and
d) Loading a new dynamic library and directly calling a native method.
3. The fundamental components responsible for Java’s sandbox are:
a) the class loader architecture
b) the class file verifier
c) safety features built into the Java Virtual Machine (and the language)
d) the security manager and the Java API
4. One of the greatest strengths of Java’s security model is that two of these components, the class loader and the security manager, are customizable.
5. Class Loader的结构以以下两种方式实现沙盒(Sandbox):
a) 它防卫可信任类库;
b) 它通过类加载器的命名空间来阻止恶意代码干扰安全代码。
6. 命名空间之所以实现安全性,因为不同命名空间的类不能相互调用。
7. 如果你的class loader向primordial class loader请求一个类(如java.lang.Virus),而这个类不存在指定的可信任类库(java.lang)中,那么,你的class loader就会抛异常。
8. class loader只能通过类名来了解这个类是来自严格限制的包(Restricted Package),还是禁止的包(Forbidden Package)。因此我们要给class loader定义严格限制的包和禁止的包的列表。
9. 如果class loader向primordial class loader发出一个类的请求(如java.lang.Virus),而这个类从属于严格限制的包(如 java.lang),并且primordial class loader无法找到,那么class loader会抛出安全异常。
10. 如果class loader向primordial class loader发出一个类的请求(如java.ding.Virus),而这个类从属于禁止的包(如 java.ding),那么class loader会抛出安全异常。
11. 正常的,如果你想实现满足安全性的class loader,你要符合以下4步:
a) 如果class loader不能从某个包装载类,那么它会检查该包是否禁止的包。如果是,抛出安全异常,否则继续第二步;
b) 该class loader向primordial class loader请求加载这个类。如果成功,返回该类,否则,继续第三步;
c) 如果请求加载的类所属的包为信任的包,并且不能在该包中加入类,class loader会检查该包是否严格限制的包。如果是,抛出安全异常,否则,继续第四步;
d) 最后,class loader会尝试从客户端加载该类(如下载)。如果成功,返回该类,否则,抛出“没有该类”的错误。
12. 类文件检查器的两个过程:
a) 在类被加载后,类文件检查器会检查类文件的内部结构;
b) 在二进制代码被执行时,类检查器会确认类,值域和方法的符号引用的存在。
13. 动态链接是把符号引用变为直接引用的过程。JVM提供两种基础的任务来实现:
a) 找到被引用的类(如果需要,就加载之);
b) 用直接引用代替指向类,值域和方法的符号引用,如用指针或位移。
14. 当一个线程调用native method时候,它完全跳出了sandbox的框框。对于native method的安全模型,与传统一样:调用它就得信任它。
--那别人提供的类库是否可以隐藏调用一些native method, 等你调用的时候做坏事。是否有这样的具体例子?
15. 使得java语言健壮的功能,同样使得它符合安全性:
a) 类型安全转换
b) 结构化内存访问(无指针)
c) 垃圾回收(不能显示释放内存)
d) 数组越界检测
e) 检查null
16. 应用可以安装security manager,一旦安装,整个应用周期都受它控制,不能删除,修改和扩展。应用调用每个JAVA API都得经过该security manager检查。
posted on 2010-04-26 21:37 jackwanzai 阅读(467) 评论(0) 收藏 举报
浙公网安备 33010602011771号