输入框中写入的密码是不是通过堆栈跟踪容易受到攻击?

Fil*_*ger 5 security passwords

我根本不是堆栈痕迹的大师.我甚至不知道如何得到它们.无论如何,我想知道输入输入框中输入的密码是否安全.无法通过获取堆栈跟踪来检索它?

以这种方式输入的密码将在许多地方找到:

  • TEdit的标题属性
  • 创建输入框的函数的结果
  • 可能是一个存储InputBox命令的Result的变量
  • 等等...

如果答案是"是的,这是一个漏洞",那么我的世界就会崩溃:p.可以做些什么来避免这个安全漏洞?

注意:InputBox是一个示例,但它可以使用"homebrewed"登录提示.
InputBox是一个Delphi命令,但我没有使用Delphi标记标记问题,因为我认为这个问题涉及任何语言.

ang*_*son 22

这被称为密闭舱口问题,并且由道格拉斯·亚当斯(Douglas Adams)在"银河系搭便者指南"(The Hitchhikers Guide to the Galaxy)一书中的章节中提到(至少有一个来源).其中,我们的两名主角被一名大警卫带走并倾倒入气闸,等待撤离到太空.在某些时候,我们的一位主角说他有一个解决方案,但"它更多地涉及在密闭舱口的另一边."

让我解释.

如果你有一个能够在你自己的机器上执行代码(或以其他方式"执行")的破解者,你已经输了.那时饼干可以做很多事情.

因此,您的第一道防线应该是防止坏人访问您的机器,如果您能够处理,安全性变得更加容易.

所以不,这不是一个漏洞,它是您的计算机工作的基本方式.

在最简单的形式中,如果某人能够获得运行中的程序的运行时实时堆栈跟踪,这可能意味着他们已经连接了一些看起来像程序的调试器,并能够"调试"您的程序它运行.断点可以轻松地从内存中获取数据,处理数据,然后在用户不知道发生任何事情的情况下恢复程序,但实际上,只要您可以在系统上执行代码,就可以更容易地获取此类信息.

现在,已经说过,在.NET和许多其他运行时都支持尝试至少使其变得更难,通过代替存储整个字符串,它们将一个和一个击键截取到输入框中,并将其与其余的密码,使每个字符不存储在纯文本中.

但是,处理此问题的代码变得非常麻烦,因为任何以明文形式获取整个密码的尝试都会使整个练习变得毫无意义,所以除非你能够端到端地传递这样的编码密码在你的系统周围,这不会有太大帮助.

在.NET中,有问题的类是System.SecureString.

然而,再一次,如果坏人可以在你的平台上执行代码,有什么可以阻止他拦截击键并将它们组合在一起形成你的密码?

以下是一些类似问题示例的链接:

你可以说我是Raymond Chen的粉丝.