2010-05-07 22 views
4

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

密码输入的方​​式在许多地方被发现:在TEDIT它创建的输入框

  • 可能的功能,存储结果的变量
  • 结果的

    • Caption属性该命令的InputBox
    • 等...

    如果答案是“是的,这是一个漏洞”,然后我的世界崩溃了:p。可以做些什么来避免这个安全漏洞?

    注意:InputBox是一个示例,但它可以带有“自制”登录提示符。
    InputBox是一个Delphi命令,但我没有用Delphi标签标记问题,因为我想这个问题涉及任何语言。

  • 回答

    21

    这被称为气密舱口盖问题,并且源于道格拉斯亚当斯的一本书中的一章(至少一个来源)称为“银河搭车指南”。其中,我们的两名主角正在被一名大型警卫携带,并被倾倒入一个气闸中,等待被撤到太空。在某个时候,我们的一位主角说他有解决方案,但是“它涉及到密闭舱口的另一侧。”

    让我解释一下。

    如果你有一个能够在你自己的机器上执行代码(或以其他方式“成为”)的黑客,你已经失去了。在这一点上,饼干可以做很多事情。

    因此,您的第一道防线应该是防止坏人访问您的机器,如果您可以处理该问题,则安全性变得更容易。

    所以不,这不是一个漏洞,它是你电脑工作的基本方式。最简单的形式是,如果某人能够获得运行时程序的运行时实时堆栈跟踪,这可能意味着他们已将某些看起来像调试程序的东西连接到程序,并且能够“调试“你的程序在运行。断点可以很容易地从内存中获取数据,对其进行处理,然后在用户不知道发生任何事情的情况下恢复程序,但实际上,获取这些信息的方法要简单得多前提是您可以在系统上执行代码

    现在,尽管如此,在.NET和许多其他运行时支持尝试至少使其更难,而不是存储整个字符串,他们拦截一个和一个按键到您的输入框,并编码它与密码的其余部分一起,以便每个字符不以纯文本格式存储。

    但是,处理此问题的代码变得非常繁琐,因为任何试图以明文形式获取整个密码的尝试都会使整个练习变得毫无意义,所以除非您能够通过此类编码密码结束对于你的系统到端,这不会真的有很大的帮助。

    In。NET,有问题的类是System.SecureString

    但是,如果坏人可以在您的平台上执行代码,那么有什么办法阻止他拦截击键并将它们组合在一起形成密码?

    这里有一个链接夫妇用类似的问题的例子:

    你可以告诉我是雷蒙德陈的粉丝。

    +0

    优秀的答案和阅读的乐趣!感谢你的回答。 – FileVoyager 2010-05-07 11:53:25

    +0

    这位坏人可能是你的大学合法登录共享机器(共享可能是因为计算机绑定的许可证)。或者,除了读取日志文件外,可能有人无法访问计算机。 – maaartinus 2014-08-18 07:57:11