首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当字符串可变时,攻击是如何发生的?

当字符串可变时,攻击是如何发生的?
EN

Stack Overflow用户
提问于 2021-01-05 16:57:31
回答 1查看 33关注 0票数 1

人们经常听到字符串是不可变的,这提高了安全性。我理解这样的想法,因为字符串是最终的,所以它们的内容不能在以后更改。但即使内容可以改变,我认为它仍然是安全的,因为代码是由开发人员而不是攻击者编写的。

或者在实践中,这种攻击实际上是如何进行的?

我在网上看到一个例子,表明如果字符串是可变的,攻击者就可以绕过安全机制。我还是不明白。以下代码是由开发人员编写的。这是攻击者永远不能接触的部分。不管字符串是不是可变的,攻击者都不能修改它们的值,对吧?

代码语言:javascript
代码运行次数:0
运行
复制
public class FileInputStream
{
 private String filename;
 public FileInputStream(String filename)
 {
  if (!allowedToReadFile(filename))
  throw new SecurityException();
  this.filename = filename;
  }
  ...
 }
EN

回答 1

Stack Overflow用户

发布于 2021-01-05 17:02:32

我相信你指的是内存溢出,如果一个字符串是可变的,那么它有一个固定的内存大小,不能改变,如果它不是,你可以输入一个足够长的值,它可以溢出到其他内存区域,并覆盖其他变量的内容,从而引入安全风险。

例如,假设您的程序中有两个变量var1和var2,这两个变量都是3字节大小的预定义字符串,那么您的内存分配将如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
[var1, var1, var1, var2, var2, var2]

初始化时的实际值为:

代码语言:javascript
代码运行次数:0
运行
复制
[0,0,0,0,0,0]

然后查询用户输入,得到"aaaa",内存堆栈将如下所示

代码语言:javascript
代码运行次数:0
运行
复制
[a,a,a,a,0,0]

这意味着在第一个变量和第二个变量之间存在溢出。

这非常依赖于语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65575774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档