Cookie 与基本身份验证

Posted

技术标签:

【中文标题】Cookie 与基本身份验证【英文标题】:Cookies vs Basic Auth 【发布时间】:2011-06-30 11:18:24 【问题描述】:

为什么几乎所有网站都使用 cookie 而不是基本身份验证? 不仅仅是用户/通行证窗口丑陋,而且没有一个更安全。它们都是不安全的(没有 https)。

【问题讨论】:

【参考方案1】:

要注销基本身份验证登录,通常需要完全退出浏览器。这意味着服务器无法注销用户。

我相信基本身份验证也有更多开销(假设您的 cookie 大小不是很大),但我可能错了。

HTTP 基本身份验证还会随每个请求发送用户名和密码,这可能会降低安全性,因为有更多的拦截机会。

【讨论】:

1. “注销”用户是什么意思?如果用户能够立即重新登录,我为什么要注销他们? “注销某人”的唯一有效方法是如果我让他们无法继续使用该网站。这始终可以通过更改用户凭据(或使其无效)来完成。 2. 开销对我来说是唯一合理的解释(到目前为止),因为服务器需要对每个请求进行密码检查。 3. 每次请求都会发送 Cookie。 Firesheep 可以劫持每一个请求。 Cookies 存储一个会话 ID,您可以删除服务器上的关联会话并有效地注销用户,因为 cookie 不再与登录关联。用户希望能够在不退出浏览器的情况下退出站点。从 cookie 中劫持会话 ID 不如获取实际用户名和密码严重,尤其是在重要操作需要用户输入密码时,即使他们已登录。 如果用户使用的不是他们自己的计算机,他们很可能想要单击注销链接。此外,基本身份验证登录对话框的不可定制性和突兀性是大多数网站选择 cookie 的重要原因。基本身份验证就是这样:basic. 但基本身份验证是设计用于身份验证的,而 cookie 不是。 Cookie 是对 http 协议的滥用,它有很好的钩子和错误代码,如果使用得当,一切都很好(在这方面,基本身份验证是 正确的)。 @Andrew Marshall:+1 用于指点 HTTP basic auth also sends the username and password with every request, making it potentially less secure because there is more opportunity for interception【参考方案2】:

您可以更好地控制 cookie。您可以对它们进行加密,这样即使没有 HTTPS,它们也是安全的。基本身份验证在 HTTP 上始终是不安全的。 cookie 也不包含每个请求的密码。而且,是的,我能说什么,用户喜欢 AJAX 登录表单和登录时漂亮的动画效果,但遗憾的是基本身份验证无法实现。

【讨论】:

我不会说加密的 cookie 比未加密的更安全。一种或另一种方式,如果你有 cookie,你可以登录。所以对于中间人来说,你的 cookie 是否被加密并不重要。 Firesheep 证明了这一点。 @loxs,是的,我同意,HTTPS 是唯一(目前)可靠且安全的使用方式。问题是,如果 cookie 使用足够强的密钥加密,那么对于不使用一些特殊硬件的标准黑客来说,在其有效期到期之前暴力破解它是不切实际的。 黑客通常不会关心 cookie 中存储的数据是什么。只要他们能登录受害者的账户。 查看我对我的回复的评论,了解为什么劫持会话比获取用户名和密码的安全风险要小。 有几种技术,例如随机化每个请求的会话 ID 和重置 cookie。无论用户是否在站点内导航,都可以通过页面上的定时后台操作来强制执行此操作。这可以与浏览器指纹识别相结合,因此如果相同的会话 ID 被盗并重用,它可能会被服务器无效。简而言之,您可以使被盗 cookie 的有用窗口非常小。尽管如此,所有这些都是通过默默无闻的安全性。 SSL 是登录和继续浏览网站的唯一安全方法。【参考方案3】:

使用 cookie,您可以完全控制何时对用户进行身份验证,而不是在有请求时立即进行。

另外,您也不必对图片进行身份验证

另一件事是您不必依赖系统管理员进行身份验证。

您还可以选择使用会话的用户存储库。

还有其他事情。正如您所说,两者或多或少都是安全的,那么为什么不选择灵活呢?为了向客户展示网站,我们经常使用服务器身份验证,因为它是一种简单的全局解决方案。对于应用内的表单,我们使用 cookie。

【讨论】:

这取决于实现。使用 webmachine (erlang) 之类的框架,您可以决定哪些地址需要身份验证。您不需要依赖系统管理员。您可以将密码存储在您选择的数据库中。

以上是关于Cookie 与基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何将 window.fetch() 与 httpOnly cookie 或基本身份验证一起使用

Twitter 身份验证的 Firebase cookie 问题

您是不是更改 cookie 身份验证用户的身份验证令牌?如果有,多久一次?

简单服务器端Blazor Cookie身份验证的演示

SPA 的 Cookie 与基于令牌的身份验证?

如何使用护照身份验证更新包含 jwt 的 cookie