文档章节

Java安全编程

pior
 pior
发布于 2017/02/24 21:14
字数 932
阅读 32
收藏 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
粉丝 25
博文 151
码字总数 22496
作品 0
济南
高级程序员
一句话讲清楚什么是JavaEE

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

qq58edeba279279
06/26
0
0
一句话讲清楚什么是JavaEE

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

qq592fbb5b34ad7
07/02
0
0
Java就业变难了?你需要对自己有点信心

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

糖宝_d864
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
几周内搞定Java的10个方法

不要将Java与JavaScript弄混了,Java的目标是“一次编译,到处调试”(呃,不对,是“到处运行”)。简单来说,就是Java程序可以直接在任何设备上运行。 Java语言是什么? 不管我们是否意识到...

拉偶有所依
2015/03/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash各类扩展详解

Bash各类扩展详解 Bash中主要包括大括号扩展、波浪号扩展、变量扩展、子命令扩展、文件名扩展和算数扩展。这些扩展组合在一起为Bash带来了极大的易用性。掌握这些扩展的用法和功能,能够为B...

小陶小陶
今天
1
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
5
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
3
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部