服务到另一个站点的站点的身份验证概念

信息安全 验证
2021-08-21 05:19:04

我们将向通过iframe(yuck) 嵌入内容的内容管理系统提供内容。我们服务的某些页面需要先经过身份验证——只有有效用户才能看到它们。

之前实施我们将要做的事情的公司通过请求做到了这一点。当然,因为没有会话管理。s的使用iframe让我们无法使用 cookie 等。这不是真正的身份验证,但他们就是这样做的……

http://example.com/get.php?ID=1234&email=alice@example.com

信不信由你:人们可以通过交换 ID 或电子邮件轻松获取其他用户的内容。现在我们想要(或必须)改变它。问题是我们无权访问客户数据我们不知道 CMS 的电子邮件地址和用户 ID。

最初制定的计划是向我们发送带有电子邮件和 ID 的加盐哈希,有人认为如果我们知道盐,就可以再次从哈希中提取电子邮件和 ID。好吧,事实证明他们不知道哈希是如何工作的……所以我有责任想出一些新的东西。

这是我想到的第一个场景:

在这种情况下,我们只会从 CMS 收到有效哈希列表,并检查用户发送给我们的哈希是否有效。这里的问题是我们需要一个哈希列表,并且 CMS 需要以某种方式将它们发送到我们的后端。我还有其他问题吗?用户尝试所有可能的哈希值呢?

第二种情况:

我们接收用户的哈希并将其发送回 CMS。CMS 验证此哈希是否确实存在并告诉我们是否可以提供内容。在这里,问题是必须提出额外的请求(性能?)。

第三种情况——我认为应该适合我们的情况:

用户向我们发送他们的电子邮件、ID 和 CMS 为他们生成的哈希值。我们与 CMS 共享一个密钥(盐),并尝试从电子邮件和 ID 重建哈希。如果匹配,则用户之前必须已在 CMS 中通过身份验证,因此我们可以提供内容。

这里的问题是我们通过 URL 发送电子邮件。现在,以前的(不安全的)实现也这样做了,但我不知道这有多大的隐私问题。

底线:在上面的例子中我有什么遗漏的吗?最后一种情况是否适合我们的情况,或者当您无法访问该方案的私有数据时,是否有另一种简单的方法来验证用户?

1个回答

这个提议的设计没有考虑重放攻击在第一个场景中,“散列”现在是密码,因此这个散列(以及用于创建这个散列的信息)必须在数据库中和传输期间受到保护。

你试图做的不是新的或独特的。当您从头开始构建某些东西时,设计、实现和与其他系统的兼容性都会出现问题。为了避免所有这些陷阱,您应该实现一个 RFC 标准,例如3-legged oauth

oauth 流的图像