mern-admin 安全加固清单:JWT 过期、CORS 跨域与密码策略最佳实践 mern-admin 安全加固清单JWT 过期、CORS 跨域与密码策略最佳实践【免费下载链接】mern-adminMERN Antd Admin MongoDB Nodejs React Node Js Rest Api CRUD Auth项目地址: https://gitcode.com/gh_mirrors/me/mern-adminmern-admin 是一款基于 MongoDB、Express、React 与 Node.js 的 MERN 全栈后台管理系统内置 JWT 认证、RESTful CRUD 接口与 Ant Design 管理界面适合快速搭建 ERP、CRM 类中后台。不过默认模板为了演示方便在 JWT 过期时间、CORS 跨域与密码策略上留有明显安全隐患。本文整理了一份 mern-admin 安全加固清单按优先级逐项给出可落地的改造方案帮你快速完成一次有效的安全体检。 适合人群正在使用或即将部署 mern-admin 的前后端开发者与运维同学。一、为什么管理后台必须做安全加固管理后台是攻击者眼中的金矿拿到一份管理员令牌就能操控全部业务数据。安全加固通常围绕三条防线展开防线常见漏洞对应措施认证令牌永不过期、弱密码JWT 过期策略 密码策略传输跨域全放开、明文传输CORS 白名单 HTTPS存储密钥泄漏、令牌存本地环境变量 HttpOnly Cookie二、JWT 过期时间设置别让令牌长生不老现状24 小时令牌一旦泄漏危害巨大在controllers/authController.js的 login 方法中令牌过期时间被写死为 24 小时exp: Math.floor(Date.now() / 1000) 60 * 60 * 2424 小时的窗口足够攻击者做很多事情。更危险的是演示用的controllers/authControllerDemo.js会直接签发固定 ID 的管理员令牌任何拿到它的人都能以管理员身份进入系统——这部分代码上线前必须移除。最佳实践按场景分级设置 JWT 过期时间访问令牌Access Token15 分钟 ~ 2 小时用于普通接口调用刷新令牌Refresh Token7 ~ 30 天仅用于换取新的访问令牌在 mern-admin 中做最小改动把 24 小时改为 2 小时并基于前端frontend/src/request/errorHandler.js中已有的jwtExpired跳转逻辑增加刷新令牌流程即可实现无感续期的体验。三、CORS 跨域配置把*换成白名单现状通配符放行 允许携带凭证在app.js中默认对任意来源放行res.header(Access-Control-Allow-Origin, *); res.header(Access-Control-Allow-Credentials, true);*与Allow-Credentials: true的组合是浏览器明确禁止的不安全配置等于允许任何网站跨域调用你的 API为 CSRF 类攻击大开方便之门。最快配置方法环境变量驱动的白名单建议引入 cors 中间件只放行你信任的前端域名const cors require(cors); const allowedOrigins process.env.ALLOWED_ORIGINS.split(,); app.use(cors({ origin: allowedOrigins, credentials: true }));把域名列表放进环境变量维护本地开发与生产环境互不干扰是成本最低、收益最明显的 CORS 跨域加固方案。四、密码策略bcrypt 是底线不是终点现状5 位密码 默认加密轮数在controllers/authController.js的 register 方法中密码最短长度只有 5 位。虽然项目已使用bcryptjs加盐哈希models/Admin.js中也提供了 hash 与校验方法但整体策略仍过于宽松。推荐密码策略长度不少于 8 位并校验复杂度大小写字母 数字 符号bcrypt 加密轮数saltRounds建议 10 ~ 12注册时做两次输入一致校验项目已有登录时用bcrypt.compare比对项目已有任何响应都不返回密码字段日志中禁止打印明文const saltRounds 10; const passwordHash await bcrypt.hash(password, saltRounds);五、令牌存储位置别把 JWT 塞进 localStorage现状前端令牌存放在 localStoragefrontend/src/auth/cookie.js虽然命名是 cookie实际使用window.localStorage读写令牌。localStorage 对所有同源脚本可见一旦页面被注入 XSS 脚本令牌就会被直接窃取。更安全的做法HttpOnly Secure Cookie将令牌改由后端通过Set-Cookie下发并设置HttpOnly、Secure、SameSiteLax属性。脚本无法读取 HttpOnly CookieXSS 攻击面会大幅收窄。若暂时无法改造至少做到令牌用后即弃、缩短有效期并配合 CSP 限制脚本来源。六、路由保护与登录态别忘双保险现状API 路由默认未挂载鉴权中间件routes/authApi.js中登录接口绑定的是演示控制器loginDemoapp.js中/api路由也没有启用isValidToken中间件代码注释里已提示正确用法。上线前必改的三件事将routes/authApi.js中的loginDemo替换为真实的login删除controllers/authControllerDemo.js演示文件在app.js中启用app.use(/api, isValidToken, apiRouter);为全部业务接口加上令牌校验isValidToken中间件位于controllers/authController.js会校验x-auth-token请求头、令牌有效性以及管理员登录状态前端frontend/src/request/request.js统一携带令牌前后端形成完整的认证闭环。七、密钥管理环境变量是最后一道防线server.js与app.js通过dotenv加载.variables.env代码中指定path: .variables.env其中包含DATABASE、SECRET、KEY、JWT_SECRET等敏感配置。请注意将.variables.env加入.gitignore严禁提交到仓库为 JWT 使用独立且足够长的随机密钥至少 32 字节开发、测试、生产环境使用不同密钥避免混用八、额外加分项可选 全站启用 HTTPS避免令牌在传输途中被截获️ 登录接口限流如 express-rate-limit防止暴力破解 记录管理员登录与敏感操作审计日志 定期轮换 JWT_SECRET并预留令牌吊销机制九、总结一张安全加固清单带走加固项目现状建议JWT 过期24 小时2 小时 刷新令牌CORS 跨域*通配白名单 环境变量密码策略最少 5 位8 位以上 复杂度令牌存储localStorageHttpOnly Cookie路由鉴权未启用isValidToken 全覆盖密钥管理.variables.env加 .gitignore 强随机想快速上手体验可以克隆项目并按 README 指引初始化git clone https://gitcode.com/gh_mirrors/me/mern-admin安全没有一次搞定而是一个持续迭代的过程。把这份 mern-admin 安全加固清单收藏起来每次发布前对照检查一遍你的后台会比大多数同类项目更结实。【免费下载链接】mern-adminMERN Antd Admin MongoDB Nodejs React Node Js Rest Api CRUD Auth项目地址: https://gitcode.com/gh_mirrors/me/mern-admin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考