我是
Java的新手,当学习时,我发现一个String是不可变的.当我正在阅读背后的原因时,出现了一些原因,例如性能提高,因为它的值不能被修改,并且可以由多个线程共享.这些理由我明白了.
但是我不知道它与安全性有关.一个String是不可变的,有助于Java安全吗?
但是我不知道它与安全性有关.一个String是不可变的,有助于Java安全吗?
请帮我理解.提前致谢.
解决方法
在编写类库时,很常见的做法是将传入到API中的参数存储在构造函数中,如下所示:
public class MyApi { final String myUrl; public MyApi(String urlString) { // Verify that urlString points to an approved server if (!checkApprovedUrl(urlString)) throw new IllegalArgumentException(); myUrl = urlString; } }
字符串可变,这将导致一个微妙的攻击:攻击者将传递一个好的URL,等待几微秒,然后将URL设置为指向攻击站点.
由于没有复制的存储是一个相当常见的做法,并且因为字符串是最常用的数据类型之一,所以留下字符串可变的将会打开许多未被编写但未被严重的安全问题打开的API.使字符串不可变关闭所有API的特定安全漏洞,包括尚未写入的安全漏洞.