我可以通过擦除cookie而不是注销来注销吗?
通常是的,因为您在问题中提供的原因:如果 cookie 中没有会话令牌,典型的 Web 应用程序将不知道您是谁。
仅擦除 cookie 与单击注销按钮有什么问题?
当您明确注销时,按照OWASP 会话管理指南管理身份验证的 Web 应用程序将使服务器端的会话无效。如果您只是简单地丢弃带有会话令牌的 cookie,则会话可能会受到会话劫持。
对于那些不熟悉开发 Web 应用程序的最佳实践的人来说,使用门锁作为类比(感谢评论中的讨论):
您的帐户可以被视为建筑物中的一个房间。当您登录时,建筑物的所有者会创建一扇门并在其上自动锁上,这样只有您可以进入。您的会话令牌是您的密钥,通常存储在浏览器的 cookie 中,但也可以存储在其他地方。
通过删除 cookie、清除缓存等来丢弃您的令牌,只是破坏了您的密钥副本。
明确注销是要求建筑物所有者用砖砌门口。无法保证他们会保护您的帐户,但作为用户,您明确表达了您的意愿。
攻击者可以通过多种方式获取您的密钥副本,称为会话劫持,这是网站所有者而不是用户的责任。
首先,攻击者只能猜测。如果站点按顺序生成会话密钥,或者使用低熵伪随机生成方法,这会使猜测变得更加容易。站点通过使用高熵令牌和定期会话回收来缓解这种情况。回收会话不会阻止访问,但在授予未经授权的访问时会很明显。
其次,攻击者可以使用会话固定:他们在您登录之前给您一个密钥,您在登录后继续使用它。站点通过在您登录时显式回收会话来缓解这种情况。
第三,中间人攻击。攻击者可以直接看到您的密钥。TLS 缓解了这一点。可以通过降级攻击、不安全的实现和零日攻击来解密 TLS 流量,但这些都远远超出了用户的域,针对 TLS 的罕见和零日攻击在被发现时往往会引发很多噪音(心脏出血等)。
作为用户,您的责任是在站点安全地走捷径时注销并追究该站点的责任,就像您在公共停车场的汽车责任是锁门一样。如果门锁被轻而易举地绕过,那是制造商的错,而不是你的错。