security - 保护 SSR Nuxt.js(或纯 Vue.js)中仅授权路由的源代码
问题描述
我使用 Express 后端和nuxt.render
中间件来整合我的 API、前端和开发环境。到目前为止,一切都很好,但我对我的身份验证设置的安全性有些担忧。
我的后端通过 Nuxt 中间件将其用户会话注入 Vuex。虽然这对于限制访问非常有效,但这些文件的源代码始终可以通过直接 GET 方法获得。(例如,如果/admin
受到保护,/_nuxt/admin.js
将仍然可用,并将包含该页面的整个源代码)。更糟糕的是,由于preload
Nuxt 将默认链接放在头部,即使没有登录,它们也会被自动获取。
我知道这并没有很多安全问题,因为我的管理 API 调用在服务器端强制执行身份验证,但有时(就像我的情况一样)公开源代码是不可取的。
我想出了一个效果很好但不是很优雅的解决方案:
在
nuxt.config.js
,我设置render.resourceHints = false
。我希望我不必这样做以从可用路由的预取中受益,但似乎没有办法限制预取路由的选择。在插入
next.render
Express 的中间件链之前,我选择性地限制了页面的源代码。(例如app.get('/_nuxt/pages/admin.js', restrict)
,如果未通过身份验证则restrict
返回 a401
或调用的中间件在哪里next()
。这会阻止 XHR 获取和直接 GET。)我制作了一个自定义
error.vue
模板,在该模板中捕获了 Nuxt 如果被迫访问用户不应访问的路由时将抛出的错误消息,如下所示Loading chunk 1 failed
,并将其规范化为“禁止”错误页面。
有没有我想念的更实用的方法,或者这超出了 Nuxt.js 目前提供的范围?
解决方案
推荐阅读
- node.js - Discord.js - 消息编辑/删除记录器错误
- c++ - 如何将 TXT 文本中的编译文件输出到屏幕?
- glsl - GLSL 双精度复数幂函数
- c++ - 如何创建一个依赖于外部非仅标头目标的 cmake 仅标头库?
- c# - 可以先触发基类属性吗?
- javascript - javascript/html 继承:对象的被调用方法无法访问此变量
- swift - 如何将部分文本转换为活动元素?
- python-3.x - 尝试测试“Webbrowser”并且该站点未显示
- c# - 找不到引用的组件“System.Runtime”
- javascript - 了解 chrome 扩展中的函数范围