博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 代码安全(一) —— 避免用String储存敏感数据
阅读量:5965 次
发布时间:2019-06-19

本文共 849 字,大约阅读时间需要 2 分钟。

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

你可能感兴趣的文章
dorado基本事件样例
查看>>
Unity寻路的功能总结
查看>>
Python访问PostGIS(建表、空间索引、分区表)
查看>>
quick-cocos2d-x开发环境Lua for IntelliJ IDEA的安装
查看>>
Target-Action回调模式
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
Socket网络编程--简单Web服务器(3)
查看>>
ylbtech_dbs_article_五大主流数据库模型
查看>>
Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
查看>>
10行Python代码解决约瑟夫环(模拟)
查看>>
一个简单好用的日志框架NLog
查看>>
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>
一款基于jquery和css3实现的摩天轮式分享按钮
查看>>
Android创建启动画面
查看>>
Linux中date命令的各种实用方法--转载
查看>>
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
查看>>
苹果企业版帐号申请记录
查看>>
C++ Error: error LNK2019: unresolved external symbol
查看>>
Bitmap 和Drawable 的区别
查看>>
Java操作mongoDB2.6的常见API使用方法
查看>>