【问题标题】:Showing a secure password dialog on a web page在网页上显示安全密码对话框
【发布时间】:2009-11-26 04:12:31
【问题描述】:

我已经为我们的网络构建了一个单点登录系统。它的工作原理是这样的:

  • 用户在他想要登录的站点(“不安全站点”)上单击登录链接。不安全网站的 ID 在 URL 中传递。
  • 他最终进入了系统(称为“RAS”)的登录页面。这是在它自己的域上,并且将来可能会获得 HTTPS,因此用户可以看到他的数据是安全的。
  • 用户登录。在保存用户 ID、不安全站点 ID 和到期时间的服务器上进行“会话”。
  • 用户的浏览器被重定向回不安全的站点。新创建会话的 ID 作为 URL 参数传递。
  • 不安全站点向 RAS 发送用户数据请求。它包括会话 ID 和一些凭据,这些凭据将识别和验证 RAS 上的不安全站点。 (请注意,用户和他的浏览器完全被排除在外)
  • 用户的数据(没有密码)被返回到不安全的站点。然后,不安全的站点将其存储在它自己的会话中,或者其他什么都没有关系。

(要查看它的实际效果,请访问例如 cncguild.net 并单击顶部附近的登录链接)

如您所见,这是非常安全的。不安全的站点在任何时候都无法访问用户的密码。

但是,关于可用性,我们希望将登录过程与不安全的网站更好地集成。这样做的方法是,而不是做整个“发送到登录页面并重定向回来”,而是打开一个弹出窗口。我目前看到三种可能的方法来做到这一点:

  • 在登录表单中添加一个覆盖 div。使用 AJAX 与 RAS 通信,直到登录完成并且客户端代码收到会话 ID。然后它可以通过将此会话 ID 发送到它自己的服务器端代码(通过刷新或 AJAX)来处理用户数据的获取。虽然这会带来最佳可用性,但也存在一些巨大的安全隐患:

    • 不安全站点的 Javascript 可以访问密码
    • 虽然用户可以检查来源,看看它是否试图窃取它,但谁是认真的呢?
  • 不要将表单放在同一个 HTML 文档中,而是让覆盖 div 包含一个带有登录页面的 iframe。

    • 这会隐藏不安全站点的密码(如果浏览器具有良好的 iframe Javascript 安全策略)
    • 没有明显的浏览器界面标记来向用户显示它是这样的。因此,恶意的不安全网站作者可以构建自己的登录表单副本,该副本看起来完全相同,但实际上不在 iframe 中。
    • 除了刷新之外,无法将会话 ID 传回不安全的站点。不可能在不安全的网站上进行花哨的 AJAX 登录。
  • 在真实弹出窗口中打开登录页面(window.open)

    • URL 和 HTTPS 图标清晰显示
    • 可能真的很丑。我不确定可用性相对于它现在的工作方式是否真的有很多好处。

您对这三个选项有何看法?当然,我期待第一个选项的嘲笑。它把安全撕成碎片。为了完整起见,我将其包括在内。 也欢迎更多选择

【问题讨论】:

    标签: javascript security usability single-sign-on javascript-security


    【解决方案1】:

    信任和安全是最重要的,我根本不会做集成登录。

    我希望我在地址栏中看到的任何域名都是我要向其发送密码的实体。在这种情况下,如果我不信任不安全的网站,无论他们是否声称使用您的 SSO 系统,我都不会登录,否则我可能会信任该系统。

    这就是 OpenID 模型流行的原因。它通过重定向浏览器来联合登录。这可以让最终用户了解并控制正在发生的事情。然后,最终用户可以根据他们对域名显示在地址栏中的 OpenID 提供商的信任来决定登录。

    【讨论】:

      【解决方案2】:

      回复

      • 他最终进入了系统(称为“RAS”)的登录页面。这是自己的 域,并且将来可能会得到 HTTPS,所以用户可以看到他的数据是 安全。
      • 用户登录。在保存 用户 ID、不安全的站点 ID 和 到期时间。

      如果用户向 RAS 登录页面发送密码,则需要使用 HTTPS,除非该网络上的所有计算机都受信任。

      用户 ID 的加密强度是否强并通过 HTTPS 发送?如果不是,那么是什么阻止一个不受信任(不安全?)的站点猜测另一个站点的用户 ID 并请求数据?

      回复:

      • 用户的浏览器被重定向回不安全的站点。新人身份证 创建的会话作为 URL 参数传递。

      如果用户单击结果页面上的链接,什么会阻止此 URL 参数显示在发送到第三个站点的引荐来源标头中?

      回复:

      因此,恶意的不安全网站作者可以构建自己的副本 的登录表单看起来完全一样,但实际上不在 iframe 中。”

      无论您做什么,都无法解决 HTML 中的可信路径问题。设置网络钓鱼域太容易了。获得可信路径的唯一方法是使用内置的身份验证协议,例如HTTP 认证。 这篇 http://www.eros-os.org/pipermail/cap-talk/2009-February/012249.html 的帖子讨论了 Web 应用程序的可信路径机制。

      回复:

      • 无法将会话 ID 传回不安全站点,除非 刷新。不可能在不安全的网站上进行花哨的 AJAX 登录。

      有很多方法可以跨帧传递少量数据。 http://ajaxian.com/archives/crossframe-a-safe-communication-mechanism-across-documents-and-across-domains 中列出的方案之一是否适合您的需求?

      【讨论】:

      • 会话 ID 不安全,但这没关系。服务器知道哪个不安全的站点可以访问它。不安全站点在请求用户数据时使用 ID 和密钥进行身份验证。这种数据请求是从服务器到服务器(不涉及客户端)。
      • 好的,那么您有签名或其他方式让不安全的网站证明其身份吗?并且您的服务器和不安全站点之间的通道是加密的?
      • 我们现在正在积极地为我们的系统获取 HTTPS,因此 2 台服务器之间的通道确实是安全的(附带说明,目前 2 台服务器实际上是 1 台服务器)。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多