gpt4 book ai didi

java - 不可变的 Java 字符串如何提高安全性?

转载 作者:太空狗 更新时间:2023-10-29 22:45:35 26 4
gpt4 key购买 nike

我刚刚了解到 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;
}
}

如果 String 是可变的,这将导致一个微妙的漏洞利用:攻击者将传递一个好的 URL,等待几微秒,然后将 URL 设置为指向一个攻击站点。

由于存储而不复制是一种相当普遍的做法,并且由于字符串是最常用的数据类型之一,因此让字符串可变会打开许多​​尚未编写的 API,从而引发严重的安全问题。使字符串不可变可为所有 API(包括尚未编写的 API)关闭此特定安全漏洞。

关于java - 不可变的 Java 字符串如何提高安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com