我根本不是堆栈痕迹的大师。我甚至不知道如何得到它们。无论如何,我想知道输入输入框中输入的密码是否安全。无法通过获取堆栈跟踪来检索它?
以这种方式输入的密码将在许多地方找到:
如果答案是“是的,这是一个漏洞”,那么我的世界就会崩溃:p
。可以做些什么来避免这个安全漏洞?
注意:InputBox是一个示例,但它可以带有“自制”登录提示 InputBox是一个Delphi命令,但我没有使用Delphi标记标记问题,因为我认为这个问题涉及任何语言。
答案 0 :(得分:22)
这被称为密闭舱口问题,并且由道格拉斯·亚当斯(Douglas Adams)一书中的一章称为“银河系搭便车指南”(The Hitchhikers Guide to the Galaxy)中的一部分(至少有一个来源)。其中,我们的两名主角被一名大警卫带走并倾倒入气闸,等待撤离到太空。在某些时候,我们的一个主角说他有一个解决方案,但“它更多地涉及在密闭舱口的另一侧。”
让我解释一下。
如果你有一个能够在自己的机器上执行代码(或以其他方式“执行”)的破解程序,那么你已经输了。那时饼干可以做很多事情。
因此,您的第一道防线应该是防止坏人访问您的计算机,如果您能够处理,安全性会变得更加容易。
所以不,这不是漏洞,它是计算机工作的基本方式。
在最简单的形式中,如果某人能够获得运动中程序的运行时实时堆栈跟踪,这可能意味着他们已经连接了一些看起来像程序的调试器并且能够“调试”你的程序运行。断点可以轻松地从内存中获取数据,处理数据,然后在用户不知道发生任何事情的情况下恢复程序,但实际上,有更简单的方法来获取此类信息只要您可以执行代码系统。
现在,已经说过,在.NET和许多其他运行时都支持尝试至少使其变得更难,通过代替存储整个字符串,它们拦截一个和一个击键进入输入框,并对其进行编码连同密码的其余部分,以便每个字符不以纯文本形式存储。
然而,处理此问题的代码变得非常麻烦,因为任何以明文形式获取整个密码的尝试都会使整个练习变得毫无意义,所以除非你能够将这些编码的密码传递给在你的系统周围结束,这不会有太大帮助。
在.NET中,有问题的类是System.SecureString。
然而,再一次,如果坏人可以在您的平台上执行代码,有什么可以阻止他拦截击键并将它们组合在一起形成您的密码?
以下是一些类似问题示例的链接:
你可以说我是Raymond Chen的粉丝。