Lol*_*lly 16 java security string
我是Java的新手,在学习的时候,我发现了一个String
不可变的事实.当我阅读其背后的原因时,出现了一些原因,例如性能提升,因为它的值无法修改,并且可以由多个线程共享.这些理由我明白了.
但我不知道它与安全性有什么关系.如何String
在Java安全性中提供不可变的帮助?
请帮助我理解.提前致谢.
das*_*ght 18
编写类库的一种常见做法是将传递到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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果是String
可变的,这将导致一个微妙的漏洞:攻击者会传递一个好的URL,等待几微秒,然后将URL设置为指向攻击站点.
由于存储而不进行复制是一种相当普遍的做法,并且由于字符串是最常用的数据类型之一,因此保留字符串可变性会打开许多未编写但尚未解决严重安全问题的API.使字符串不可变关闭所有API的特定安全漏洞,包括尚未编写的API.
归档时间: |
|
查看次数: |
4094 次 |
最近记录: |