【问题标题】:How much authentication is necessary with Restful PUT/POST?Restful PUT/POST 需要多少身份验证?
【发布时间】:2016-02-19 06:27:10
【问题描述】:

我有一个组织需要向我发送一组预先确定的非常敏感的数据。我现在的流程是这样的,

  1. 已创建网页https://mywebsite.com/random/

  2. 页面需要 HTTPS 并且只接受 POST/PUT 请求或重定向

  3. 我做的第一件事是检查两个变量,“unique_id_1”和“unique_id_2”。这些变量中的每一个都必须与我的数据库中已有的帐户完全匹配。

此时,恶意人员必须首先找到网页,然后必须找出这两个变量的名称,并用正确的匹配数据填充它们。这种情况发生的可能性有多大?

我考虑过添加第三个变量“shared_key”,然后与提交者共享一个文本字符串,以包含在每个 PUT/POST 请求中。这会有多大帮助?

我的另一个想法是我们俩都用预共享密钥编写了一个散列日期。他们发送变量,我将其与我自己的匹配。这样,密钥每天都在变化。矫枉过正?

Basic Authentication 怎么样,它甚至那么安全吗?我目前拒绝并重定向不正确的访问者/数据。看起来要求身份验证的网站只会更多地提示潜在的黑客程序。

【问题讨论】:

  • 使用预共享密钥散列的日期是我见过的一种很好的方法。您可能希望将密钥作为每个组织的参数,以防万一有一天您想让另一个组织在同一界面上向您发送相同的数据。

标签: rest


【解决方案1】:

似乎要求身份验证的网站只会做 更多信息以提示潜在的黑客程序。

这是不实施身份验证的可怕原因。您不需要为整个站点执行此操作,您可以仅针对您的 API 端点执行此操作。

如果您的数据“非常敏感”,除了 HTTPS,您可能还需要考虑以下部分或全部:

  • 使用the Qualsys checker 确保您的 HTTPS 本身是安全的。
  • 让 API 用户注册其 IP 地址并锁定服务,使其仅响应该 IP。
  • 需要客户端证书(由您创建),例如 SSLVerifyClient require
  • 在请求之上使用基本或摘要式身份验证。这样就不需要您的 id1/id2 参数了。
  • 如果您觉得有足够的动力,请实施 OAuth。
  • 实现URL signing,而不是您的第三个“共享密钥”参数。

还有:

  • 不要将客户端日期的哈希值与服务器日期的哈希值进行比较。它将在午夜附近中断,尤其是客户端和服务器位于不同时区或时钟漂移时。

【讨论】:

  • 我做了一些more reading 和基本身份验证似乎并没有增加太多的安全方式,只是在 POST 正文中包含密码。 IP 地址可以是spoofed 单向通信,如 REST。 HMAC(你链接到的)是我计划加密日期的方式。我计划生成两个日期来匹配昨天和今天,这样我就可以了解时间变化。不过感谢您提供的信息。
  • Basic Auth 是一个既定的约定,您不应该尝试重新发明,并且实施它不需要客户端的任何额外工作,因为一切都已经支持它。从 REST 有效负载的角度来看,它还具有带外的优势。 (就像身份验证一样。)关于IP过滤,说你不应该实施它,因为IP可以被欺骗,就像说你不应该锁你的门,因为锁可以被撬开。此外,生成两个日期仍然不能解决午夜问题——你会得到昨天和今天与今天和明天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2011-11-28
  • 2021-10-10
  • 2015-07-29
  • 2020-10-16
  • 1970-01-01
相关资源
最近更新 更多