gpt4 book ai didi

security - 在其他域 iframe 中验证 session 的最佳方法

转载 作者:行者123 更新时间:2023-12-02 02:17:58 27 4
gpt4 key购买 nike

我有一个站点 A,它在 iframe B 中嵌入了模块。这些模块可能是其他域。用户在 A 中有一个经过身份验证的 session ,我希望 B 拒绝加载,除非用户在 A 中有一个有效 session 。除了用户与 A 有一个经过身份验证的 session 之外,B 不需要知道任何事情。没有 session 数据是需要的。

目前,A 和 B 都不支持 HTTPS,但是一旦我能说服楼上的人购买 SSL 证书,我希望改变这种情况。

因此,我想到了两种截然不同的方案来以安全的方式实现这一点,但我不确定哪一种方案效果更好,因此我希望能在这里得到一些反馈。感谢您的帮助!

选项 1

  1. A 将 ?session=SESSION_ID 附加到 B 的 URL
  2. B 处的服务器端脚本提取 session ID,并执行 GET A/verify?session=SESSION_ID
  3. 回复 200 OK 或 403 Forbidden
  4. 如果 A 的回复是 200,则认为用户已通过身份验证并允许访问 B

优点

  • 易于实现
  • 无需共享配置(除了 B 已经知道的 A 的 URL)

缺点

  • B 必须联系 A,这会增加加载时间
  • session ID 应该是 secret 的——实际上不应该被传递
  • 易受重放攻击(只要 session 有效)

选项 2

  1. A 使用 A 和 B 共享的 key 加密包含时间戳、A 的 URL、B 的 URL 和盐的数据 block ,并将其附加到 B 的 URL
  2. B 的服务器端脚本解密数据 block ,验证 URL 并检查时间戳是否太旧
  3. 如果一切正常,则认为用户已通过身份验证并被允许访问 B

优点

  • 没有服务器-服务器通信
  • session ID 永远不会传输给 B
  • 不易受到重放攻击(超出时间戳允许的时间延迟)

缺点

  • 实现起来更复杂
  • A 和 B 需要在某种程度上同步
  • A和B需要共享一个 key

最佳答案

选项 3

A 生成随机散列并将其与 session ID(两个字段)一起存储在数据库表中。 A 将散列传递给 B 的每个 URL,例如“B/?hash=x”

A 检查散列是否匹配数据库表中的任何内容,并检查 session ID 是否仍然经过身份验证(可能已注销或过期)然后告诉 B 如果好不好。比如A/verify?hash=x

正如您所说,B 除了是否经过身份验证之外不需要知道任何其他信息。

这种方式不会在 URL 中传递 session ID,正如您所说,这也不理想。

关于security - 在其他域 iframe 中验证 session 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com