Java 代码安全(一)
     —— 避免用String储存敏感数据

如果重要的数据(保存在内存中)在使用后没有及时清理,有可能会导致信息泄漏。开发人员通常都回用String 保存敏感数据(密码,卡号等)。因为String 对象是不可变的,只有 JVM 的垃圾回收器才能从内存中清除String的值。而只有内存不足的时候虚拟机才会执行垃圾回收,所以我们不能保证垃圾回收什么时候进行。当系统崩溃后,memory dump 可能会泄漏敏感数据。

这里解析一下String 对象不可变是什么意思
比如 String  s1 = “abc”;  s1 = “def”;
这里引用 s1 只是重新指向另外一个对象。对象”abc”并没有被修改。

例子一:
   Final char[] password = getPassword();
   String  passwordAsString = new String(password)

这里passwordAsString 不确定什么时候被清理掉,容易被泄露。

解决方案:
   当重要数据不需要再使用的时候,保证把它清除掉。用byte 数组 或 character 数组来代替一些不可变的对象,比如String。应为byte 和 character 数组能用程序清理掉。
如:

Final char[] password = getPassword();
//use the password

//clear when finished
Arrays.fill(password,’’);

Memory dump : 内存转存  
用途:存一个当时内存的副本,可以用工具打开复原当时的情况。因为东西都在内存里。

附:java中String类的内存分配  http://jingyan.baidu.com/article/8275fc869a070346a03cf6f4.html

Java 代码安全(一)      —— 避免用String储存敏感数据的更多相关文章

  1. java代码----数据类型的转换-----int --->String

    总结:int ----->String package com.a.b; //测试..char--->int // int--->String public class Yue2 { ...

  2. 在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 <% // ...

  3. List<Map<String,Object>>使用Java代码遍历

    List<Map<String,Object>>的结果集怎么使用Java代码遍历以获取String,Object的值: package excel; import java.u ...

  4. JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。

    JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.

  5. char和String 在jsp java代码中与jstl代码中的区别

    在 jsp java代码中 '0' ,这种代表char 在jstl中 '0' 会被解释为 String  所以也可以用  .equals  方法

  6. Java代码执行过程概述

    Java代码经历三个阶段:源代码阶段(Source) -> 类加载阶段(ClassLoader) -> 运行时阶段(Runtime) 首先我们来理清一下Java代码整个执行过程, 让我们对 ...

  7. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  8. 数据结构笔记--二叉查找树概述以及java代码实现

    一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...

  9. java代码的初始化过程研究

        刚刚在ITeye上看到一篇关于java代码初始化的文章,看到代码我试着推理了下结果,虽然是大学时代学的知识了,没想到还能做对.(看来自己大学时掌握的基础还算不错,(*^__^*) 嘻嘻……)但 ...

随机推荐

  1. Hibernate乐观锁和悲观锁

    Hibernate支持两种锁机制: 即通常所说的"悲观锁(Pessimistic Locking)"和 "乐观锁(OptimisticLocking)". 悲观 ...

  2. HttpServletRequest 各种方法总结

    HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象 ...

  3. adt的问题An internal error has occurred. After scene creation, #init() must be called

    这个问题困扰了我好久,我也尝试去百度.google无济于事啊,让我寝食难安,太难受了,我把它贴出来,希望后人不绕弯子... 解决办法: 即可,解决这一个问题,现在酣畅淋漓,挥洒自如的capy代码了

  4. App对接支付宝移动支付功能

    前段时间看了下app对接支付宝移动支付的功能,并自己总结了下支付宝移动支付的实现流程 一.申请流程          前提是已有现成的应用. 1.  申请地址            https://b ...

  5. 浅谈对java中锁的理解

    在并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在java中synchronized关键字被常用于维护数据一致性.synchronized机制是给共享 ...

  6. 单发邮箱 群发邮箱 程序 Email winform

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  7. 在ExpressJS中设置二级域名跨域共享Cookie

    问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.ses ...

  8. Yahoo前端优化十四条军规

    相信互联网已经越来越成为人们生活中不可或缺的一部分.Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能. 比如Google机会已经把最基本的office应 ...

  9. RegExp类型(正则表达式)

    直接量语法 /pattern/attributes 创建 RegExp 对象的语法: new RegExp(pattern, attributes); 一.attributes: 修饰符 描述 i 执 ...

  10. aps.net验证控件的异常处理

    异常错误信息: WebForms UnobtrusiveValidationMode 需要"jQuery"ScriptResourceMapping.请添加一个名为 jquery ...