For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
昆明IT培训的小编这一期给大家讲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 :内存转存
用途:存一个当时内存的副本,可以用工具打开复原当时的情况。因为东西都在内存里。