【问题标题】:Does https make this any more secure?https 是否使这更安全?
【发布时间】:2012-04-17 22:53:27
【问题描述】:

我正在阅读 Web 服务的 API,所有方法都涉及发送 HTTP 请求到

https://example.com/api/APIVER/METHOD?apikey=APIKEY&user=USERNAME&password=PASSWORD

需要明确的是,API 密钥和用户密码都是通过 URL 以纯文本形式发送的。但这是否可以,因为“所有 HTTPS 流量都已加密”,还是因为它们仍然是纯文本或 URL 有所不同?

如果这不安全,API 维护者需要做的最小更改是多少?

【问题讨论】:

  • 这个 API 的预期用途是什么?是服务器到服务器的调用吗?还是您打算从浏览器进行此调用?如果您从浏览器执行此操作,则不安全,但服务器到服务器很好。
  • 它不是为浏览器设计的,但它可以被客户端应用程序(移动设备、桌面客户端等)使用
  • 那么它不安全。任何人都可以下载该应用程序,监控网络连接并提取用户名/密码。只有当您的用户使用特定于用户的密码进行身份验证时,从客户端应用调用的 API 才能受到保护。

标签: security http rest https asp.net-web-api


【解决方案1】:

是的,HTTPS 让这更安全。

【讨论】:

    【解决方案2】:

    HTTPS 使这更安全。

    您还应该将敏感参数作为 POST 参数而不是 GET 查询字符串的 (HTTP BODY) 发送。通常,查询字符串将由 Web 服务器日志(服务器端)以纯文本形式记录,因此系统管理员可能无法看到它。

    【讨论】:

    • 谢谢,看来 POST 参数确实有效。除非 API 发生变化,否则我会为我的客户坚持使用它。
    【解决方案3】:

    HTTPS 将对每个请求中的 URL 进行编码,因此如果您担心网络嗅探,那么您就可以了。 HTTPS 还添加了一个 nonce 值,因此您不会受到回复攻击。

    根据基础设施,插入用户设备信任的虚假 SSL 证书并使用该证书通过代理路由请求是可能的。但是,这将需要对客户端计算机的管理员/根访问权限才能使此类证书受信任(除非违反通常受信任的 CA),并且一旦某事需要管理员访问权限,所有赌注都将被取消。

    虽然这仍然不是一个好主意,但我会担心开发人员忘记为 HTTPS 配置它。您有一个 API 密钥,那么为什么不使用 APIKEY 作为盐来获取密码并对其进行哈希处理。现在对于 API 调用,盐是等效的密码,但这意味着用户名和密码不能用于使用这些凭据登录到其他地方,例如 API 正在运行的网站(假设您让用户登录当然在那里。)

    更好的办法是使用一个根本不会通过网络传输的共享密钥,并将其用作盐。

    【讨论】:

    • 我担心中间人攻击,所以很高兴听到。您对开发人员忘记 HTTPS 的担忧是有道理的,因为我刚刚发现这些调用仍然有效。我猜你第三段其余部分背后的想法是,如果我可以将我的 APIKEY 保密并用它来加盐他们的密码,那么我可以将它存储在本地吗?或者这只会在 API 更改为仅接受加盐密码时才有帮助?
    • 我会将 API 更改为仅接受加盐密码。并且显然在您的网络服务器上禁用 HTTP。
    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2015-11-15
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2013-09-20
    • 2019-07-22
    相关资源
    最近更新 更多