【问题标题】:How to start a valid user session inside an iframe如何在 iframe 中启动有效的用户会话
【发布时间】:2014-05-02 12:22:39
【问题描述】:

我需要设置一个主站点,将站点 1 和站点 2 嵌入 iframe,登录并在其中启动用户会话。

站点 1 (RoR) 和站点 2(未知框架)拥有自己的身份验证(用户名、密码、cookie、通常的框架安全性)。

主站点 (PHP) 服务器可以直接访问站点 1 数据库,并且我知道密码哈希算法,因此我可以针对站点 1 验证主站点的登录密码。如果需要,站点 2 可以相应地更改其密码,但没有访问数据库和框架。

很遗憾,我无法更改站点 1 或站点 2 中的任何内容。尽管存在对站点 1 的完全读取权限,但我只能围绕它进行构建。

我已经绘制了一个快速图表以更好地展示我的意思/需要:

a busy cat http://gettaxi.me/public_img/help.png

我需要在 iframe 中启动用户会话。站点 1 的登录凭据与主站点相同,因为它们来自同一个数据库,站点 2 的凭据将被假定为相同(如果不是,则可能仅显示登录失败)。

到目前为止的想法列表:

  1. 我可以将登录凭据记录到主站点 cookie 中,并使用它来填充 iframe 字段。也许存储加密版本并在需要时解密?但是,将密码存储在 cookie 中(甚至是加密的)似乎很荒谬。

  2. 与上述相同,但将其存储在主站点会话变量中。

  3. 跨域 cookie 的想法在这里似乎毫无用处,因为每个网站都必须设置自己的会话 cookie,一个网站不能为另一个网站设置它...

我以前从未像这样处理过任何跨域的事情。因此,在我开始编写可能会或可能不会工作的疯子之类的东西之前,我向您寻求帮助和建议!您将如何实现这一目标?这可能吗?

其他问题:

  1. 站点 1 和站点 2 在 iframe 中设置的 cookie 的行为是否相同?它们是否持久,如果我以后打开同一个网站而不是 iframe,它们会被接受吗?

  2. 如果存储凭据(cookies/会话)是唯一的方法:那么我将如何在 iframe 中填充登录字段并提交表单? Javascipt?一些巧妙的 GET/POST/重定向技巧?

提前致谢!

【问题讨论】:

  • 您至少愿意解释一下否决票吗?
  • 大多数人都对“你会怎么做”这样的问题感到厌烦......除非他们是由具有高代表的人提出的,否则他们完全没问题。就像责备人们和制造离题的cmet一样。随着这个社区的集体编码智慧和这些问题的出现频率,一次又一次,废话,也许有权力的人会意识到 SO 的代码审查部分不会吸引人们。可能只是一个理解的事情,但如果他们改变它,信徒就不能拖钓桥和拍人们的手。我们都知道这不可能发生:)
  • 出于这个原因...我支持您,先生!我认为这是一个经过深思熟虑的问题,并且因为我过去曾有过类似的任务,所以我很高兴看到回复。

标签: javascript php html iframe cross-domain


【解决方案1】:

好的,结果很简单。并且坚持下来投票者......面对 - 我会在这里发布我自己的解决方案,谁知道,也许有人会发现它有用。

  1. 用户登录主站点
  2. 验证凭据
  3. 生成随机客户端令牌
  4. 使用该令牌加密密码并将密码存储在会话变量中
  5. 设置 cookie 并将该令牌存储在用户浏览器中

点击链接到站点 1 或 2 时的 jQuery 操作:

  1. 使用该令牌向服务器发送 ajax 请求
  2. 验证用户会话并成功解密存储的密码
  3. 将密码发送回客户端并预先填写模拟 iframed 网站登录表单的隐藏表单的用户名和密码字段
  4. 使用target="iframe" 提交该表格
  5. 清除那些预先填写的表单域

Vuala,一个工作的跨域 iframe 自动登录...

当然还有更多的事情,比如隐藏、在按钮点击时取消隐藏 div、会话超时、任何用户操作时令牌到期更新等等,但最重要的是它有效!是的,密码以明文形式发送了 3 次,但这些网站都没有 HTTPS。密码也不是明文存储的。

更新:

说得太早了。当 iframe 内容返回 Access-Control-Allow-Origin 标头时,IE 和 Safari 会出现问题。他们更强大的安全策略会谨慎对待 iframe 内容,并且不允许保存会话 cookie。它可以通过在 IE 中删除隐私设置、在 Safari 中允许 3rd 方 cookie 或简单地检测浏览器来修复,如果它是上述之一 - 在新的选项卡/窗口中打开它。

否则,在 Chrome、Firefox、Opera 和 Maxthon 中运行良好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2017-06-15
    • 1970-01-01
    • 2011-10-11
    • 2010-11-09
    • 2014-02-25
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多