有没有可行的替代“传统”cookie身份验证的方法?

11

除了HTTP身份验证(我了解到在互联网上本质上不安全),还有没有其他方法让“现实生活”网站处理登录和身份验证,而不是使用会话cookie的传统方式?

除了传统的使用会话 cookie 的方式,是否有任何其他方法(除了 HTTP 身份验证,因为它在互联网上天生不安全),可以让“实际应用”的网站处理登录和身份认证?
7个回答

6

HTTP摘要认证(与HTTP基本认证完全不同)在直接HTTP上非常安全,而且在服务器上实现也非常简单。没有任何东西被发送到网络上可以显示出密码是什么,只有一些信息允许客户端向服务器证明他们有正确的密码。

如果您想要一个体面的解释来实现HTTP摘要认证在您的应用程序中,Paul James有一篇优秀的文章

HTTP身份验证唯一真正的问题在于浏览器本身:用户界面很糟糕,但可以通过一些Javascript来克服

补充:这个答案已经有将近十年了。现在,您应该真的无论其他考虑都应该使用HTTPS。


3

当与SSL (https://) 网站一起使用时,HTTP基本身份验证是完全安全的,因为所有HTTP流量(包括凭据)都将被加密。但这种方法的一个主观缺点是,使用此方法时,您的用户需要与其浏览器的身份验证弹出窗口进行交互,以便登录您的网站。


那么,据推测大型网站不使用HTTP认证是因为SSL在两端的资源开销比较大?用户能够与身份验证弹出窗口交互会有什么问题吗?如果他们有残疾,难道他们不已经有机制来克服这个问题了吗? - Jonathan Ford
没有SSL,任何形式的网络身份验证都不够安全,因此决策更多地与登录时所需的安全级别有关,而与使用的身份验证类型无关。浏览器弹出窗口的问题主要与网站设计有关,因为它可能显得不协调,并对用户造成不适。 - Adam Alexander

2
要明确的是,唯一真正的方法是通过HTTPS实现。但是,我假设这不是一个选项,并且我也假设您正在寻找“完全托管的登录”系统,因此我会继续:除了HTTPS之外,还可以使用JavaScript在客户端进行安全哈希密码,以防止明文密码在传输过程中泄露,但这只是半个解决方案。这种方法的问题包括:1.重放攻击仍然是可行的选择。2.只有启用JavaScript的用户才能以这种方式进行身份验证。另一种方法是更复杂的挑战/响应机制:1.在登录页面上发送“挑战”。2.在客户端计算密码+挑战的哈希值。3.提交登录。4.在服务器端计算密码+挑战的哈希值(不得信任页面请求中的哈希值),并进行比较。这种方法的问题包括:1.只有启用JavaScript的用户才能以这种方式进行身份验证。2.必须在服务器上存储明文密码以验证挑战响应,并且必须加密或以其他方式保护。现在,公平地说,问题#2并不像听起来那么危险。实际上,当您使用HASH身份验证时,哈希本身被提升到“密钥”级别。在这一点上,使用cookie存储类似于会话ID的随机生成的登录参考ID相当安全,但服务器可能希望使用引用IP作为IV或KEY的一部分进行加密,以防止其他用户劫持ReferrenceID。无论如何,我希望这提供了一些关于设计方向的指导。

1

使用HTTPs时,HTTP身份验证并不是不安全的。


更正:在使用HTTPS时,HTTP身份验证与SSL会话一样安全。 - Randolpho
你无法在基本身份验证中实现注销功能,这相当糟糕 :) - dr. evil
对于Firefox,请查看这些错误:https://bugzilla.mozilla.org/show_bug.cgi?id=55181和https://bugzilla.mozilla.org/show_bug.cgi?id=287957。但是,我同意。 - Bill Lynch

1
首先,HTTP身份验证在SSL上是安全的,除了您无法实现真正的“注销”功能之外。用户需要关闭他们的浏览器,这非常糟糕。
其次,如果您需要使其安全,则必须在所有情况下使用HTTPS,然后您可以获得基本身份验证类似的东西,例如“摘要”和“NTLM身份验证”。

0

当您使用https时,您还可以在客户端浏览器中安装证书并进行验证。myopenid为其OpenID帐户提供此功能。我有一个帐户,从客户端的角度来看,它运行得非常好。


0

使用SSL加密与HttpOnly Cookies相结合,以帮助防止XSS攻击,是使用Cookies的最佳选择。虽然我不会说它是百分之百安全的。


它不能完全防止XSS攻击,但可以增加攻击者的难度。 - dr. evil
但是仍然可以通过交互式XSS渠道进行利用。请查看BeeF、BrowserRaider、XSS Shell和XSS Tunnelling。 - dr. evil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接