为什么 express-session connect.sid 值在客户端可见?
Why is express-session connect.sid value is visible on client?
我正在研究 express-session 并阅读他们的文档,似乎在客户端,名称为 connect.sid
的 cookie 存储会话 ID。我对安全性的了解有限,但如果会话 ID 如此容易访问,这不是一个漏洞吗?
Cookie 对目标客户是私有的。这对于 socket.io 或 google 登录没有什么不同。如果服务器想要保护它们,那么您 运行 通过 https 的连接并且它是端到端加密的,唯一可以访问这些 cookie 的是客户端本身。这就是浏览器登录和识别先前经过身份验证的客户端的方式。
另外,socket.io sessionID 不需要是秘密。它不授权任何东西。它只是将客户端标识为与之前相同的客户端。如果应用程序希望该客户端经过身份验证和安全,那么这需要以某种不同的方式发生。没有任何与 socket.io cookie 关联的身份验证。
如果您使用的是快速会话并且希望它安全,那么您需要使用端到端 https。这可以保护传输中的会话 cookie。是的,如果您的客户端受到威胁并且有人窃取了会话 cookie 并在它过期之前使用它,他们可能会劫持会话。但是,这就是您使用 https 的原因,因此无法从传输过程中的某个地方获取会话 cookie。因此,需要确保安全的是客户端本身。而且,这与使用身份验证的每个网站的要求相同。这是 Web 的架构,对于 socket.io 或 express-session 来说并不是什么新鲜事。
So what would happen if somehow your computer is hacked and the hacker obtains access to the client's browser, and hence the cookies & session ID as well? Then they wouldn't be hijacking the session while it's in transporting
首先,您可以快速使您的 cookie 过期(例如在 5 分钟内不活动)。您会看到银行网站这样做。
那么,如果计算机本身受到威胁,您的问题就会大得多。攻击者可以植入键盘记录器或其他间谍软件并窃取您的实际登录凭据,不仅用于您的网站,还用于电子邮件和其他类似的东西。
有比登录用户名和密码更高的安全级别。例如,您可能需要一个物理硬件,它要么插入您的 USB 端口,要么要求您从设备输入代码(不断变化)。我曾为需要这种设备以便从公司 LAN 外部登录公司网络的公司工作。这是所谓的 "two-factor" 身份验证的一种形式。
如果您查看银行等网站,它们通常会对登录计算机进行某种检测,如果它看起来像一台陌生的计算机(缺少其他 cookie、不同的 IP 地址、不同的用户代理、不同的屏幕分辨率、等...) 然后他们需要额外的登录步骤,例如将代码发送到您的 phone,您必须在登录之前输入该代码。或者,他们要求您在让您登录之前回答其他个人问题。他们还可以通知帐户持有人使用新计算机登录。如果那不是你,请查看 change/resecure 你的帐户凭据。
Would you suggest setting up a re-route of my entire website from HTTP to HTTPS to solve this?
是的。任何对安全性感兴趣的站点都应该需要通过 https 进行访问。
网上有很多关于这个话题的文章。您可以从阅读此处的文章开始:https://www.google.com/search?q=best+practices+for+securing+login
我正在研究 express-session 并阅读他们的文档,似乎在客户端,名称为 connect.sid
的 cookie 存储会话 ID。我对安全性的了解有限,但如果会话 ID 如此容易访问,这不是一个漏洞吗?
Cookie 对目标客户是私有的。这对于 socket.io 或 google 登录没有什么不同。如果服务器想要保护它们,那么您 运行 通过 https 的连接并且它是端到端加密的,唯一可以访问这些 cookie 的是客户端本身。这就是浏览器登录和识别先前经过身份验证的客户端的方式。
另外,socket.io sessionID 不需要是秘密。它不授权任何东西。它只是将客户端标识为与之前相同的客户端。如果应用程序希望该客户端经过身份验证和安全,那么这需要以某种不同的方式发生。没有任何与 socket.io cookie 关联的身份验证。
如果您使用的是快速会话并且希望它安全,那么您需要使用端到端 https。这可以保护传输中的会话 cookie。是的,如果您的客户端受到威胁并且有人窃取了会话 cookie 并在它过期之前使用它,他们可能会劫持会话。但是,这就是您使用 https 的原因,因此无法从传输过程中的某个地方获取会话 cookie。因此,需要确保安全的是客户端本身。而且,这与使用身份验证的每个网站的要求相同。这是 Web 的架构,对于 socket.io 或 express-session 来说并不是什么新鲜事。
So what would happen if somehow your computer is hacked and the hacker obtains access to the client's browser, and hence the cookies & session ID as well? Then they wouldn't be hijacking the session while it's in transporting
首先,您可以快速使您的 cookie 过期(例如在 5 分钟内不活动)。您会看到银行网站这样做。
那么,如果计算机本身受到威胁,您的问题就会大得多。攻击者可以植入键盘记录器或其他间谍软件并窃取您的实际登录凭据,不仅用于您的网站,还用于电子邮件和其他类似的东西。
有比登录用户名和密码更高的安全级别。例如,您可能需要一个物理硬件,它要么插入您的 USB 端口,要么要求您从设备输入代码(不断变化)。我曾为需要这种设备以便从公司 LAN 外部登录公司网络的公司工作。这是所谓的 "two-factor" 身份验证的一种形式。
如果您查看银行等网站,它们通常会对登录计算机进行某种检测,如果它看起来像一台陌生的计算机(缺少其他 cookie、不同的 IP 地址、不同的用户代理、不同的屏幕分辨率、等...) 然后他们需要额外的登录步骤,例如将代码发送到您的 phone,您必须在登录之前输入该代码。或者,他们要求您在让您登录之前回答其他个人问题。他们还可以通知帐户持有人使用新计算机登录。如果那不是你,请查看 change/resecure 你的帐户凭据。
Would you suggest setting up a re-route of my entire website from HTTP to HTTPS to solve this?
是的。任何对安全性感兴趣的站点都应该需要通过 https 进行访问。
网上有很多关于这个话题的文章。您可以从阅读此处的文章开始:https://www.google.com/search?q=best+practices+for+securing+login