第三十三章、如何写出安全的java代码
从java语言的角度,需要重视的是程序级别的攻击,也就是利用Java、jvm或应用程序的瑕疵,进行低成本的Dos攻击,这也是想要写出安全的java代码所必须考虑的,例如:
1、如果使用的是早期的JDK和Applet等技术,攻击者构建合法但恶劣的程序就相对容易,例如,将其线程优先级设置为最高,做一些看起来无害但空耗资源的事情;
2、利用java构建类似上传文件或者其他接受输入的服务,需要对消耗系统内存或存储的上线有所控制,因为我们不能将系统安全依赖于用户的合理使用。其中特别注意的是涉及解压缩功能时,就需要防范zip bomb等特定攻击;
3、另外,java程序中需要明确释放的资源又很多种,比如文件描述符,数据库连接,甚至时再入锁,任何情况下都应该保证资源释放成功,否则即使平时能够正常运行,也可能被攻击者利用而耗尽某类资源,这也算是可能的Dos攻击来源。
各阶段如何排查避免安全隐患?
1、开发和测试阶段
在实际开发中,各种功能点五花八门,未必能考虑的全面,尽量使用广泛验证过的工具、类库,不管时来自JDK自身,还是Apache等第三方组织,都在社区的反馈下持续地完善代码安全;
开发过程中应用代码规约标准,是避免安全问题的有效手段;
在早期设计阶段,就由安全专家组对新特性进行风险评估;
开发过程中,尤其是code review阶段,应用OpenJDK自身定制的代码规范;
利用多种静态分析工具如Findbugs、Parfait等,帮助早期发现潜在安全风险,并对相应问题采取零容忍态度,强制要求解决;
部署阶段
JDK自身也是个软件,难免会存在实现瑕疵,我们看到JDK更新的安全漏洞补丁,其实就是在修补这些漏洞,大多数存在序列化相关漏洞问题都是因为使用的JDK版本较低,可以通过部署解决问题;
如果是安全敏感型产品,建议关注JDK在加解密方面的路线图,同样的标准也应用于其他语言和平台,很多早期认为非常安全的算法,已经被攻破,及时地升级基础软件是安全的必要条件。