第31讲心得
该讲介绍了 Java 应用开发中的注入攻击。
- 注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。
- 运行时安全机制,就是限制 Java 运行时的行为,不要做越权或者不靠谱的事情,具体来看:在类加载过程中,进行字节码验证,以防止不合规的代码影响 JVM 运行或者载入其他恶意代码。类加载器本身也可以对代码之间进行隔离,例如,应用无法获取启动类加载器(Bootstrap Class-Loader)对象实例,不同的类加载器也可以起到容器的作用,隔离模块之间不必要的可见性等。目前,Java Applet、RMI 等特性已经或逐渐退出历史舞台,类加载等机制总体上反倒在不断简化。利用 SecurityManger 机制和相关的组件,限制代码的运行时行为能力,其中,你可以定制 policy 文件和各种粒度的权限定义,限制代码的作用域和权限,例如对文件系统的操作权限,或者监听某个网络端口的权限等。我画了一个简单的示意图,对运行时安全的不同层次进行了整理。
- Java 提供的安全框架 API,这是构建安全通信等应用的基础。例如:加密、解密 API。授权、鉴权 API。安全通信相关的类库,比如基本 HTTPS 通信协议相关标准实现,如TLS 1.3;或者附属的类似证书撤销状态判断(OSCP)等协议实现。