JAVA的编码安全注意事项及一些安全问题规避措施
编码安全问题规避
1.参数要做校验:
-
验证所有的从不信任的数据源来的输入,默认其为不安全的数据,不仅要验证类型,也要验证参数长度值范围 尽量使用白名单不使用黑名单 所有客户端验过得参数,在服务器端要在验一遍
2.禁止日志及异常中打印敏感信息
-
要注意日志信息info、wran、error级别的控制,禁止打印明文密码、身份证号等证件号码、系统敏感信息、姓名、电话号码等
3.用完的临时文件要及时删除
-
例如:临时上传的测试文件等
4.用完的调试代码要及时删除
-
例如:代码调试时的main方法、为方便查看日志时加的多余的日志打印、业务代码中加的UT
5.禁止使用弱加密算法
参考:
加密算法的安全级别(Security Level of Cryptographic Algorithms)
6.防止注入攻击
-
例如XML攻击、SQL注入攻击等
7.禁止代码中存在硬编码
-
例如将URL直接写在业务代码里,应该学会定义成员变量,常用的数据可以定义到Common类中,整个包都可以引用
8.使用强的随机数字生成器
-
例如不适用Random生成伪随机数,可以SecurityRandom等,或改用UUID,时间戳等
9.对于传输的敏感数据,做到先签名,再加密 10.充分的异常管理
-
异常抛出时做到准确、精细、可控,防止接口处异常吞掉业务深处的异常信息。
11.代码简单易读,可以有效的解决问题。
-
尽量做到clean code的标准(《代码简洁之道》《阿里巴巴编码规范》这一类的编码规范类书籍可以借鉴一下)
12.注意编译器警告。
-
编译时,用最高的告警级别,并且清除所有的警告。 使用好的编程习惯避免这些错误的发生。 用工具辅助贯彻落实编码(CheckStyle、FindBug、CodeDEX、PMD等)
13.坚持最小权限原则。 14.使用有效的质量保证技术。
-
单元测试、测试覆盖率 异常数据测试、Fuzz测试 自动化代码扫描工具、自动化漏洞扫描工具 人工代码审查