0

我需要允许用户在浏览网站时登录 web 应用程序。所以实际上他们可以用更少的权限浏览网站,他们必须登录才能获得完整的权限。所以我需要允许他们登录,同时让他们保持在同一页面上,最好是通过对话框/覆盖或弹出式的东西,让他们在同一页面上使用用户名/密码凭据登录。

现在的问题是,我想通过 http 为整个站点提供服务,并且只通过 https 登录/注册,那么当登录对话框出现时,我如何从普通页面(该用户当前正在浏览)上的 http 切换到 https在同一页上?最好我想在同一页面上允许登录。我该如何实现这种行为?

4

3 回答 3

2

根据您的描述,我认为您正在寻找隐藏位置栏的弹出窗口,无论它是不同的窗口(旧式弹出窗口)还是页面上的元素(AJAX 式弹出窗口)。

此类弹出窗口的主要问题是它们往往会阻止用户检查 URL。用户将无法检查它https://是否被使用,它是否与他们期望的站点一起使用,并且没有发生证书验证错误。

不幸的是,只有用户可以检查这个,而不检查这个会使连接容易受到 MITM 攻击(例如网络钓鱼)。

如果您想要安全,用户需要能够检查他们登录的位置(不仅仅是您的主站点,还有他们输入密码的页面)。

(此身份验证问题也与您问题的第二部分有关:您不能真正使用自签名证书,因为您的用户不会真正知道如何信任它。)

于 2013-10-30T21:39:07.457 回答
0

要添加到@Aurand 和@Bruno 的出色答案(+1'd),您可以实现一个系统,其中匿名用户通过 HTTP 浏览站点,但在登录发生之前,当前页面通过 HTTPS 重新加载。重新加载后,将显示 AJAX 模式登录对话框。

所以:HTTP-> 用户点击Login-> HTTPS-> 用户可以输入他们的usernamepassword-> 提交 -> 继续HTTPS

如果你走这条路线,必须非常小心。主要想到的是:

  • 对设置的任何身份验证 cookie使用安全标志,以确保它们仅通过 HTTPS 传输。
  • 用户登录后,他们将继续使用 HTTPS 进行所有站点活动。您可以在注销后将用户返回到 HTTP 以进行匿名浏览。
  • 登录或注销时,您应该更新存储在 cookie 中的任何其他会话标识符令牌以防止Session Fixation
  • 但是,理想情况下,所有会话标识信息都应仅存储在设置了安全标志的身份验证 cookie 中。
  • 您可以维护一个与身份验证 cookie 具有相同到期日期/时间的简单 cookie,但是这个不会设置安全标志。例如LoggedIn=true,如果在 HTTP 连接上遇到此 cookie,则用户将被重定向到 HTTPS 版本,以便他们可以继续他们的会话(例如,返回用户到他们的身份验证会话被记住或仍处于活动状态的站点)。在重定向到 HTTPS 时,他们的身份验证 cookie 会被验证,如果不成功,用户将在没有LoggedIn=truecookie 的情况下返回到 HTTP,以便他们可以匿名浏览或再次登录。

但是,始终将所有用户(包括匿名用户)重定向到 HTTPS 可能更容易,记住在所有 cookie 中包含安全标志。由于摩尔定律,对性能的影响很小。

于 2013-11-01T09:54:38.860 回答
0

现在的问题是,我想通过 http 为整个站点提供服务

那就不要打扰 HTTPS 身份验证。如果您希望网站安全,则需要通过 HTTPS 提供每个页面,否则您会以明文形式发送会话标识符之类的内容。你试图做的就像在墙是用薄纸做的时候建造一扇坚固的门,这是没有意义的。

于 2013-10-30T23:17:26.780 回答