【问题标题】:Accessing the clr's interned string list访问 clr 的实习字符串列表
【发布时间】:2008-12-23 13:03:33
【问题描述】:

我刚刚回答了question,我说虽然字符串实习很好,但它可能是一个安全问题,因为稍后可以轻松访问字符串值。

虽然我很确定这是真的 :-) 我不确定这真的很容易。我尝试用谷歌搜索这个主题,但没有得到相关结果(google-fu 在这方面很弱),所以我在 SO 上试试你们。

您知道在应用程序域中访问 intered 字符串列表的任何“简单”方法吗?我必须使用内存转储之类的东西还是有像 AppDomain.GetInteredStringsList() 这样的方法?

与此相关:从 intered 字符串中获取任何有用的数据真的很容易。将敏感数据存储在字符串中真的存在安全漏洞吗?

【问题讨论】:

    标签: .net string clr


    【解决方案1】:

    这不是特别容易 - 但它是可行的。

    基本上,如果您有任何可以进行内存转储的东西,您可以找到看起来像是字符串对象的内存位。 (特别是,它们在开始时都有相同的“类型信息指针”,所以如果你有一个示例字符串,你就走了。)

    顺便说一句,这与实习字符串无关。这不像 所有 字符串都是被实习的 - 只有字符串常量和用户明确实习的字符串。

    【讨论】:

    • 引用没有指向类型信息的指针,对象在其对象头中有该信息。
    • 对不起,这就是我的意思 - 字符串的内存位。我会编辑答案。
    • ... 和您使用的字符串打开,即使它们与其中一种情况不匹配。我想这属于“明确实习生”,尽管它不像明确这样做那样明确;)
    • 如果它们不是文字,你如何打开它们?我想“字符串常量”稍微正确一些......我会编辑它。
    • 我没有看到很多情况下开发人员会明确地实习字符串,除非他非常关注内存使用。你有什么例子可以很自然地使用它吗?
    【解决方案2】:

    存储真的是一个安全漏洞吗 字符串中的敏感数据?

    是的,绝对是的!

    应使用SecureString 类存储敏感安全数据。

    编辑:

    因为即使是实习字符串也存储在托管堆中,使用转储堆的工具会显示应用程序中的所有字符串。

    【讨论】:

    • SecureString 不被认为是安全的。例如,一些实时调试工具(Hawkeye、sosassist 等)可以读取它们。
    • @Mark 没有什么是安全的,如果你知道如何阅读,只要你知道加密方案,你就可以阅读任何加密的字符串。
    • 调试工具可以访问额外的内核对象并拥有额外的权限,正常进程甚至不在管理员帐户下,并且无法读取 SecureStrings
    • 但是由于我们谈论的是人们窥探进程或转储,因此这些担忧是完全相关的。如果我们不是在谈论这种窥探,string 会很安全。
    【解决方案3】:

    在合理的应用程序中,密码存储在字符数组中,以便在不再需要时可以覆盖它们。

    【讨论】:

    • 您有任何示例说明您将如何做到这一点吗?我不明白您将如何使用密码输入框或 asp.net 登录表单来完成此操作
    【解决方案4】:

    并非不可能...虽然不一定通过托管代码。任何可以访问进程转储(windb / sos / 等)的东西都可以轻松查找字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2013-03-10
      • 2010-09-23
      • 1970-01-01
      • 2016-09-11
      相关资源
      最近更新 更多