express-session:我不明白为什么它可以安全

express-session: i don't understand why it can be secure

好的,我看到了这个例子,我喜欢这个 cookie 是加密的。

var app = express()
app.set('trust proxy', 1) // trust first proxy
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}))

这是我的问题,假设 A 和 B 坐在一起,B 复制 A 的请求,其中包括会话信息(加密的 cookie)并放入他的请求中。是的,B 无法解密 cookie,但那又怎样? 从服务器端,它检查会话信息,它对 A 和 B 使用相同的秘密。所以请求通过了。

那么从安全的角度来看,这个会话比 cookie 更有用吗?

express-session: i don't understand why it can be secure

如果您 运行 使用 https 并且您的物理计算机对外界是安全的,那么您的快速会话 cookie 在本地存储时不受外界影响,在传输到服务器时受到(通过 https)保护。

因此,只要保护会话 cookie 不被窃取,那么只有拥有该会话 cookie 的计算机才能访问存储在服务器上的 express-session 数据。

常规 cookie 也是如此(它们也需要 https 来确保安全),但会话 cookie 的不同之处在于它不包含任何实际数据。它只包含一个加密的 ID,服务器使用该 ID 来识别与该用户对应的会话对象。然后会话数据仅在服务器本身上可用,这进一步使其免受某些类型的攻击。

This is my question, let's say A and B sit next to each other, B copies A's request which includes the session info (encrypted cookie) and put in his request.

如果 B 可以看到 A 的 cookie,因为 A 没有使用 https 而 B 可以访问 A 的网络,那么没有什么是安全的。您需要将 https 用于普通 cookie 或会话 cookie 以获得适当的安全级别。事实上,如果 B 可以在网络上看到整个交易,即使 A 登录也可能不安全。

So how's this session be more useful than cookie from security point of view ?

如果您 运行通过 http 连接它们,两者都不安全。如果您 运行 在 https 上访问它们,那么两者都是安全的。但是,会话具有将实际会话状态存储在普通 cookie 中所不具备的各种功能,例如跨多个设备维护会话的能力(当会话存储持久化并重新附加到来自任何设备的用户的任何登录时