先执行命令安装依赖:npm install express express-session,再创建app.js文件,写入以下完整配置:
``` const express = require('express'); const session = require('express-session'); const app = express(); app.use(express.json()); // 会话配置:所有Cookie必须开启核心安全属性 app.use(session({ name: 'user_sid', // 自定义会话Cookie名,避免默认名暴露技术栈 secret: 'your_unique_secret_key_202408', // 32位以上随机密钥,必须定期更换 resave: false, saveUninitialized: false, cookie: { httpOnly: true, // 禁止JS读取Cookie,彻底阻断XSS窃取 secure: process.env.NODE_ENV === 'production', // 生产环境强制HTTPS,本地调试设为false sameSite: 'Strict', // 严格模式,仅允许同站请求携带Cookie maxAge: 86400000 // 24小时有效期,按需调整 } })); ```注意点:本地调试时,在启动命令前添加NODE_ENV=development,避免HTTP下secure属性导致Cookie无法生效。
添加全局中间件,仅允许合法域名发起请求,中间件必须放在所有路由之前,完整代码:
``` // 全局请求校验中间件 app.use((req, res, next) => { const allowedOrigins = ['https://你的正式域名.com', 'http://localhost:3000']; // 替换为你的合法域名 const origin = req.headers.origin; // 同站请求或合法跨站请求放行 if (!origin || allowedOrigins.includes(origin)) { return next(); } // 非法请求直接返回403,拒绝服务 return res.status(403).send('Forbidden: Invalid request source'); }); ```
补充:若应用支持JSONP等特殊跨站场景,需将对应域名加入allowedOrigins数组,避免误拦截合法请求。
在用户登录、权限变更、敏感操作(如修改密码)时,必须重置会话ID,防止攻击者复用已窃取的会话,完整登录路由示例:
``` // 登录路由:验证通过后重置会话ID app.post('/api/login', (req, res) => { const { username, password } = req.body; // 此处替换为你的账号密码验证逻辑(如查询数据库) if (username === 'test' && password === '123456') { // 重置会话ID,完全替换旧会话,阻断复用 req.session.regenerate((err) => { if (err) return res.status(500).send('Login failed'); // 存储用户信息到新会话 req.session.user = { id: 1001, username: 'test' }; return res.send('Login success'); }); } return res.status(401).send('Invalid credentials'); }); ```关键:regenerate方法会销毁旧会话并生成新ID,旧会话立即失效,彻底避免固定会话攻击。
上一篇: 网站数据备份的核心方法与安全策略详解
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图