文档章节

Java安全编程

pior
 pior
发布于 2017/02/24 21:14
字数 932
阅读 38
收藏 0

1.限制敏感数据的生命周期

对存储敏感信息的数据用后没有清除

---解决方案: 对敏感信息使用过后, 要主动进行清除. 尽量不用String这样的不可变数据存储.

敏感信息被交换到磁盘存储

---解决方案: 选用安全操作系统

通过日志, 调试信息等暴露敏感信息

----解决方案: 对相关信息进行检查

通过缓存(bufferedReader)读取敏感数据后, 没有清除缓存

----解决方案: 改用Channel, 并主动调用clear()方法清空缓存

2.不要在客户端存储未经加密的敏感数据

----解决方案: 在客户端存储的数据进加密, 并用有效时间控制风险

3.为敏感可变类提供不可修改的包装器

内部可变的敏感数据在对外返回时, 可能受到恶意修改

----解决方案: 通过创建子类, 并重写敏感数据方法, 将数据复制后返回,

4.确保安全敏感方法被调用时参数经过验证

5.防止任意文件上传

----解决方案: 通过Apache Tika 对文件元数据进行解析和验证

6. 正确的编码或转义输出

----解决方案: 对于危险的字符, 如HTML里的<>, 即使输入相关可信, 也要再对输出信息进行检查和转义

7.防止代码注入

----解决方案: 在使用Javascript这样的脚本引擎时, 要对输出的代码进行白名单无害化处理.

8.不要依赖可以被不可信代码覆盖的方法

----解决方案: 当调用一个不可信对象的clone()方法进行主动防御式编程时, 可能启用了恶意代码, 对此应使用手动复制的方法;  如果对于一个复合对象, 不能确定其equals方法重写是否可信, 可以用逐个属性比对的方式处理. 对于自定义的敏感类, 可用final修饰, 保证其不会被恶意重写.

9.不要使用不安全的弱加密算法

----解决方案: 如MD5, DES, 3DES, SHA-1等不安全的加密算法, 不要在生产环境中使用

10.使用散列算法存储密码等单向敏感信息

----解决方案: 将密码等信息用SHA-256 等算法散列后进行存储, 既能提高很高的安全性, 又保持密码的单向验证功能.

11.确保SecureRandom正确地选择随机种子

----解决方案: SecureRandom类的默认构造方法是选择了一个内部很强随机性的种子, 如果你不能保证自己提供的随机种子的随机性, 请用默认构造方法.

12.不要授予过多的特权

----解决方案: 在用AccessController的doPrivileged()方法进行授权时, 应传递第二个参数进行权限的限制.

13.最小化特权代码

----解决方案: 确保特权代码段只包含需求增加特权的操作.

14.不要将使用降低安全性检查的方案暴露给不可信代码

JVM支持类加载器通过动态加载额外的类来在运行时扩展, 类加载器架构通过使用不同的类加载器来控制来自不同来源的代码之间的交互. 如果攻击类的类加载器可以将不可信类的加载委托给可信类的类加载器, 将发生特权升级.

----解决方案: 不要对外开放据有类加载能力的可信代码. 防止被攻击利用.

 

© 著作权归作者所有

共有 人打赏支持
pior
粉丝 26
博文 151
码字总数 22496
作品 0
济南
高级程序员
私信 提问
Java就业变难了?你需要对自己有点信心

伴随着IT的火热,越来越多的人进入了IT领域,这在进一步推动着IT发展的同时也极大增加了就业压力。伴随着激烈的岗位竞争,越来越多的人开始感叹工作难找,越火的行业越是如此,Java自是首当其...

糖宝_d864
2018/06/08
0
0
什么是Java语言?java语言简介

Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的W...

阿秀a
2010/10/19
0
0
一句话讲清楚什么是JavaEE

Java技术不仅是一门编程语言而且是一个平台。同时Java语言是一门有着特定语法和风格的高级的面向对象的语言,Java平台是Java语言编写的特定应用程序运行的环境。Java平台有很多种,很多的Jav...

qq58edeba279279
2018/06/26
0
0
SUN JDK的网友评论

SUN公司的Java开发工具包,原汁原味的。 JDK 6.0 文档: http://www.oschina.net/uploads/doc/j2se/index.html JDK 6.0 JavaDoc:http://www.oschina.net/home/apidoc?api=javase-6-doc-api......

红薯
2009/12/11
286
1
一句话讲清楚什么是JavaEE

摘要: Java技术不仅是一门编程语言而且是一个平台。同时Java语言是一门有着特定语法和风格的高级的面向对象的语言,Java平台是Java语言编写的特定应用程序运行的环境。Java平台有很多种,很多...

qq592fbb5b34ad7
2018/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
今天
2
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
3
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
3
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
3
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部