【发布时间】:2017-03-07 07:20:13
【问题描述】:
我一直在 MEAN 项目中使用 express-sessions (https://www.npmjs.com/package/express-sessions) 和 angular-route 来管理用户登录/身份验证。一旦用户登录或注册,他们的用户数据(例如整个User)就会被分配给一个会话,然后用户会被重定向到一个新页面:#!/dashboard。
为了防止用户在没有先注册或登录的情况下访问#!/dashboard,我从我的角度控制器进行了快速的“会话检查”,我称之为“会话检查”,该控制器传递给角度工厂,快速ping服务器-side 检查会话对象。
如果会话存在,我返回一个布尔值true,如果会话不存在,我发送一个布尔值false。然后我做一个条件语句:如果为真,继续抓取#!/dashboard 页面上的帖子或用户数据等(用户会话有效)。如果为false,则重定向到登录页面所在的/(阻止用户访问#!/dashboard)。
这实现了我的目标,即阻止用户现在在没有登录/注册的情况下在浏览器中输入/#!/dashboard,但这似乎是一个昂贵的解决方案,而且不是很干净。
是否有更简洁或更好的方法来执行此“会话检查”以防止在没有有效登录会话的情况下访问我的后端页面?
我使用过 express 中间件,也许有办法对每个请求进行快速检查?
有人对我如何改进会话检查有任何建议吗?
【问题讨论】:
-
如果我没有错,您正在从客户端(角度)进行会话检查。如果没有很好地实施,那将是一场巨大的安全灾难。
-
你的应用是完全单页的应用
-
@Iceman 也许这是一个很大的安全问题——我还在学习——更多信息:我检查会话的方式是创建一个服务器路由,去后端,签入
req对象,如果存在会话,如果存在,则返回 true,如果不存在,则返回 false(作为变量,validSession)。然后,一旦收到来自后端的响应,我在我的角度工厂中运行的回调函数中有一个简单的行:if (!validSession) { $location.url('/'); };因此,如果会话无效,它会重定向到/页面。您的方法看起来好多了,但是这种方式被描述为不安全吗? -
@BOSS 是的,它是使用
angular-routes的单个寻呼机——有单独的页面,但它们是以角度加载的部分。 -
是的,一个布尔值的客户端检查是黑客可以利用的安全漏洞来访问他不应该看到的页面。解决方法是意识到这一切都很好:UI 是一种客户端数据,它实际上是公开的。但是,与此 UI 相结合的内部数据应该受到保护。因此,它必须在 UI 渲染时获取,并根据用户会话的有效性提供给客户端代码。然后一切都归结为:我可以信任我的客户的 req/res 机制吗?它是可篡改的吗? => 安装安全软件。有中间人吗? => https
标签: javascript angularjs node.js session mean-stack