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

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

转载于:https://www.cnblogs.com/Jac440682/p/6417327.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值