Cookie 对目标客户端是私有的。这对于 socket.io 或 google 登录没有什么不同。如果服务器想要保护它们,那么您通过 https 运行连接,并且它是端到端加密的,唯一可以访问这些 cookie 的是客户端本身。这就是浏览器如何登录和识别以前经过身份验证的客户端。
socket.io sessionID 也不需要是秘密。它不授权任何东西。它只是将客户端标识为与以前相同的客户端。如果应用程序希望该客户端经过身份验证和安全,则需要以不同的方式进行。没有任何与 socket.io cookie 相关的身份验证。
如果您使用的是快速会话并且希望它是安全的,那么您需要使用端到端 https。这可以保护传输中的会话 cookie。是的,如果您的客户端遭到入侵并且有人窃取了会话 cookie 并在它过期之前使用它,他们可能会劫持会话。但是,这就是您使用 https 的原因,因此无法从传输中间的某个位置获取会话 cookie。因此,需要保护的是客户端本身。而且,这与每个使用身份验证的网站的要求相同。这是 web 的架构,对于 socket.io 或 express-session 来说并不是什么新鲜事。
那么,如果您的计算机以某种方式被黑客入侵,并且黑客获得了对客户端浏览器的访问权限,进而获得了 cookie 和会话 ID,会发生什么情况?这样他们就不会在传输过程中劫持会话
首先,您可以快速过期 Cookie(例如在不活动的 5 分钟内)。您会看到银行网站这样做。
然后,如果计算机本身已受到损害,您将面临更大的问题。攻击者可以植入键盘记录程序或其他间谍软件,并可以窃取您的实际登录凭据,不仅用于您的网站,还用于电子邮件和其他类似的东西。
除了用户名和密码登录之外,还有更高级别的安全性。例如,您可能需要插入 USB 端口或要求您从设备输入代码(不断变化)的物理硬件。我曾为需要这种设备以便从公司 LAN 外部登录公司网络的公司工作。这是所谓的“双因素”身份验证的一种形式。
如果您查看像银行这样的网站,他们通常会对登录计算机进行某种检测,如果它看起来像一台不熟悉的计算机(缺少其他 cookie、不同的 IP 地址、不同的用户代理、不同的屏幕分辨率等)。 ..) 那么他们需要额外的登录步骤,例如向您的手机发送一个代码,您必须输入该代码才能登录。或者,他们要求您在让您进入之前回答其他个人问题。他们也可能会通知该帐户持有人使用新计算机登录。如果不是您,请更改/重新保护您的帐户凭据。
您是否建议将我的整个网站从 HTTP 重新路由到 HTTPS 来解决这个问题?
是的。任何对安全感兴趣的网站都应要求通过 https 访问。
网络上有很多关于这个主题的文章。您可以从这里阅读文章开始:https://www.google.com/search?q=best+practices+for+securing+login