0
我正在使用node.js.我正在考虑在会话变量中存储一个会话ID,这样每次我向某个路由发出请求时,服务器都会检查数据库中具有该会话ID的用户是否有权访问该页面。如何在没有数据库开销的情况下检查授权?
这似乎有点低效,因为每个页面请求都会有数据库调用。我知道我可以将一些数据存储在cookies/session变量中以避免数据库调用,但是我容易被篡改。
其他Web开发人员如何处理此问题?
我正在使用node.js.我正在考虑在会话变量中存储一个会话ID,这样每次我向某个路由发出请求时,服务器都会检查数据库中具有该会话ID的用户是否有权访问该页面。如何在没有数据库开销的情况下检查授权?
这似乎有点低效,因为每个页面请求都会有数据库调用。我知道我可以将一些数据存储在cookies/session变量中以避免数据库调用,但是我容易被篡改。
其他Web开发人员如何处理此问题?
与https一起使用的服务器端会话和关联的加密会话cookie是安全的。所以,只要在服务器端会话中保留一个值,告诉你用户是否已经过身份验证,并且只需在服务器端会话对象中检查该变量即可。这就是我所知道的每个网站都会做的事情。
与适当的会话存储一起使用的NPM模块express-session
将为您执行大部分操作。
如果你有一个特定的原因,为什么你认为这不安全,请分享这些原因,以便他们可以讨论。
以下是关于确保node.js服务器安全的一般性文章,第6条关于保护会话cookie:9 Security Tips to Keep Express from Getting Pwned。
我猜想我试图在会话cookie中尽可能少地存储信息,简单地说,如果有人“读取”cookie中的信息,他们不会了解有关网站内部功能的任何信息。我想一个签名的cookie和https应该有助于避免篡改。 –
@KaizerSozay - 类似express-session的东西只在cookie中存储单个会话ID(只有长的加密字符串)。所有其他用户会话状态都存储在服务器端的实际会话对象中,服务器本身以外的任何人都无权访问该对象。 – jfriend00
谢谢。我不知道! –