【问题标题】:Protecting REST Token In Memory保护内存中的 REST 令牌
【发布时间】:2015-02-13 03:27:52
【问题描述】:

所以我有一个 REST api。我有一个 C# 客户端,可以通过 https 使用用户名/密码登录。它以字符串形式返回令牌。我存储该令牌,然后当我进行进一步的 API 调用时,我可以创建一个 Authorization 标头:

client.Headers.Add("Authorization", "Bearer" + token);

但是令牌被返回并作为字符串存储在内存中。这不会使其成为令牌在内存转储中可见的安全问题吗?

【问题讨论】:

  • 好像你正在与客户端共享令牌,并且客户端永远不能被信任,那么安全问题是什么?
  • 那么如果token被复制了,那么根据token的到期时间,它不能被黑客使用吗?
  • 假设 - 这与没有简单解决方案的“会话劫持攻击”相同。也就是说,如果客户端计算机遭到入侵,那么获取未加密的原始凭据比尝试会话劫持更​​有可能(也更容易)。这不是一个值得担心的问题。如果有证据表明这对您的应用程序来说是一个真正的问题,那么您能做的最好的事情就是在每个请求上重新生成令牌(但要注意无序到达的客户端请求)。

标签: c# rest token


【解决方案1】:

如果此人可以读取计算机上的内存,那么您可能已经失去了任何安全措施。他们将能够反编译您的客户端,以发现您用来掩盖它的任何机制,并能够对它们进行逆向工程。此外,在您采取任何措施保护它之前,他们可能能够侦听网络请求并访问用户名/密码和任何令牌。

您最好假设令牌可能会被泄露。如果它确实落入坏人之手,则使其具有时间限制和可撤销性,至少可以限制损害。您还应该像对待用户名/密码一样对待它,并根据谁被授予令牌来限制 API 的访问范围,而不是通过您的客户端进行访问这一事实。

【讨论】:

    【解决方案2】:

    正如 tvanfosson 所说...如果有人可以访问您已经丢失的计算机上的内存。也就是说......您可能可以使用一些技术来加强安全性。 oauth 令牌只是一组加密的值。您可以在令牌中加密客户端 IP 地址并在令牌传递时验证 IP。

    【讨论】:

    • 我接受了 tvanfosson 作为我的答案,但我也喜欢你将 IP 地址嵌入其中的想法。
    猜你喜欢
    • 2014-08-16
    • 2014-04-05
    • 2019-11-03
    • 2019-12-15
    • 2017-04-20
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多