Javascript 在网页上显示安全密码对话框

Javascript 在网页上显示安全密码对话框,javascript,security,usability,single-sign-on,javascript-security,Javascript,Security,Usability,Single Sign On,Javascript Security,我已经为我们的网络建立了一个单点登录系统。它的工作原理如下: 用户单击他想要登录的站点(“不安全站点”)上的登录链接。不安全站点的ID在URL中传递 他最终进入了系统(称为“RAS”)的登录页面。这是在它自己的域中,将来可能会获得HTTPS,因此用户可以看到他的数据是安全的 用户登录。在服务器上进行“会话”,其中保存用户ID、不安全站点ID和到期时间 用户的浏览器被重定向回不安全的站点。新创建的会话的ID作为URL参数传递 不安全站点向RAS发送用户数据请求。它包括会话ID和一些凭证,用于识别

我已经为我们的网络建立了一个单点登录系统。它的工作原理如下:

  • 用户单击他想要登录的站点(“不安全站点”)上的登录链接。不安全站点的ID在URL中传递
  • 他最终进入了系统(称为“RAS”)的登录页面。这是在它自己的域中,将来可能会获得HTTPS,因此用户可以看到他的数据是安全的
  • 用户登录。在服务器上进行“会话”,其中保存用户ID、不安全站点ID和到期时间
  • 用户的浏览器被重定向回不安全的站点。新创建的会话的ID作为URL参数传递
  • 不安全站点向RAS发送用户数据请求。它包括会话ID和一些凭证,用于识别和验证RAS上的不安全站点。(请注意,用户及其浏览器完全不受此影响)
  • 用户的数据(不带密码)返回到不安全的站点。不安全的站点然后将其存储在自己的会话中,或者不管怎样,这都无关紧要
(要查看它的运行情况,请转到例如cncguild.net并单击顶部附近的登录链接)

正如你所看到的,这是相当安全的。不安全站点在任何时候都不能访问用户的密码

然而,关于可用性,我们希望更好地将登录过程与不安全的站点集成在一起。实现这一点的方法是打开一个弹出窗口,而不是执行整个“发送到登录页面并重定向回”。我目前认为有三种可能的方法可以做到这一点:

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

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

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

    • URL和HTTPS图标清晰显示
    • 它可能真的很难看。我不确定可用性是否真的比它现在的工作方式受益很多
你对这三个选项有什么看法?当然,我希望第一种选择会遭到嘲笑。它把保安撕成碎片。为了完整起见,我把它包括进去了。 欢迎提供更多选项

Re

  • 他最终进入了系统(称为“RAS”)的登录页面。这是它自己的 域名,并可能在未来获得 HTTPS,因此用户可以查看其数据 安全
  • 用户登录。在保存会话的服务器上进行“会话” 用户ID、不安全站点ID和 有效期
如果用户向RAS登录页面发送密码,则需要使用HTTPS,除非该网络上的所有计算机都受信任

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

关于:

  • 用户的浏览器被重定向回不安全的站点。新用户的ID 创建的会话作为URL参数传递
如果用户单击结果页面上的链接,是什么阻止此URL参数显示在发送到第三个站点的推荐人标题中

关于:

因此,恶意的不安全网站作者可以构建自己的副本 外观完全相同,但实际上不在iframe中的登录表单。”

无论您做什么,都无法解决HTML中的受信任路径问题。设置网络钓鱼域太容易了。获取受信任路径的唯一方法是使用内置的身份验证协议,例如HTTP AUTH。 这篇文章讨论了web应用程序的可信路径机制

关于:

  • 没有办法将会话ID传回不安全的站点,除非 刷新。不可能在不安全的站点上登录任何花哨的AJAX
有许多跨帧传输少量数据的方法。
上面列出的方案中有一个适合您的需要吗?

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

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


这就是为什么OpenID模型很受欢迎。它通过重定向浏览器来联合登录。这使最终用户能够了解并控制正在发生的事情。最终用户可以根据对OpenID提供商的信任决定登录,该提供商的域名显示在地址栏中。

会话ID不安全,但这并不重要。服务器知道哪个不安全的站点可以访问它。不安全的站点在请求用户数据时,使用ID和密钥进行身份验证。此数据请求是从服务器到服务器(不涉及客户端)。好的,那么您已经