Java字符串如何不可变增加安全性?

我是Java的新手,当学习时,我发现一个String是不可变的.当我正在阅读背后的原因时,出现了一些原因,例如性能提高,因为它的值不能被修改,并且可以由多个线程共享.这些理由我明白了.
但是我不知道它与安全性有关.一个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的特定安全漏洞,包括尚未写入的安全漏洞.

转载注明原文:Java字符串如何不可变增加安全性? - 代码日志