基于VSCode的Node应用针对跨站请求伪造防御机制本地测试

梦丽大大_4018

梦丽大大_4018

2026-09-14

102人浏览

原创

csrf token必须由服务端动态生成并注入,不可硬编码;正确做法是每次get渲染页面时生成唯一token写入cookie(httponly: false, samesite: 'lax', secure: false),前端读取后通过x-csrftoken头提交,服务端严格比对header与cookie值。

基于vscode的node应用针对跨站请求伪造防御机制本地测试

CSRF Token 必须从服务端动态注入,不能硬编码

本地测试时最容易犯的错,是把 csrf_token 写死在前端 HTML 或 JS 里,比如直接写 headers: {'X-CSRFToken': 'abc123...'}。这会导致所有请求共用同一个 token,服务端一验证就失效——因为每次 GET 渲染页面时,服务端应生成并设置新的 csrf_token cookie,且该值必须唯一绑定当前会话。

正确做法是:服务端在返回转账页(如 /transfer GET)时,调用 res.cookie('csrf_token', getRandomString(48)),同时确保前端 JS 通过 document.cookiefetch 响应头读取它。不要依赖 localStorage 存储或手动拼接字符串。

  • getRandomString(48) 必须每次调用都生成新值,不能缓存或复用
  • cookie 设置需带 httpOnly: false(否则 JS 无法读取),但 secure: false 可接受(本地 http 环境)
  • 若用 Express + cookie-parser,务必在 app.use(cookieParser()) 后注册路由,否则 req.cookies 为空

POST 请求必须携带 X-CSRFToken header,且校验逻辑不能跳过

VSCode 调试时常见现象:前端发 POST 成功,但服务端没做任何校验,或只校验了 header 却忽略 cookie 对比。真正的防护逻辑是两步缺一不可:读取 req.headers['x-csrftoken'],再读取 req.cookies.csrf_token,二者严格相等才放行

示例错误写法:if (req.headers['x-csrftoken']) { /* 直接执行转账 */ } —— 这等于没防,攻击者可随意伪造 header。

  • 校验必须区分大小写:Express 默认转为小写,req.headers['x-csrftoken'] 是标准写法,X-CSRFToken 会被 normalize 成小写
  • 若 token 不匹配,应立即 return res.status(403).send('Invalid CSRF token'),不能继续执行业务逻辑
  • 注意:GET 请求无需校验,但所有状态变更的 POST/PUT/DELETE 都必须校验

Referer 校验仅作辅助,不能替代 Token

有人图省事,在 VSCode 本地跑个 app.post('/transfer', (req, res) => { if (req.headers.referer?.startsWith('http://localhost:3000')) { ... } }) 就以为防住了。这是危险的——Referer 可被浏览器插件、代理或某些客户端主动删除,且本地开发时跨端口(如前端 5173、后端 3000)会导致 Referer 值为 http://localhost:5173,不匹配预设值。

jinn-node
jinn-node

在Jinn网络为自主项目工作赚取代币奖励,让闲置的OpenClaw代理开始工作。

下载

Referer 检查只能作为第二道防线,且必须配合白名单而非简单 startsWith:

  • 生产环境白名单应精确到协议+域名+端口,例如 https://mybank.com,不能只写 mybank.com
  • 本地测试时,若前后端不同端口,Referer 值会是 http://localhost:5173,需显式加入白名单数组
  • 若启用 SameSite=Lax cookie,Referer 校验可弱化,但 Token 仍是主防手段

VSCode 调试时容易漏掉 Cookie 的 SameSite 和 Secure 属性

本地启动 Node 服务(http://localhost:3000)时,若 cookie 缺少 sameSite: 'lax' 或错误设置了 secure: true,会导致浏览器拒绝发送 cookie,进而使 req.cookies.csrf_token 为空,所有 POST 校验失败——你看到的是“token 无效”,实际是 cookie 根本没传过来。

调试建议:打开 Chrome DevTools → Application → Cookies,确认 csrf_token 是否存在、SameSite 值是否为 Lax(非 Strict,否则表单提交可能被拦截)、Secure 是否为 false(本地 http 环境必须关掉)。

  • Express 中设置 cookie 正确写法:res.cookie('csrf_token', token, { httpOnly: false, sameSite: 'lax', secure: false })
  • sameSite: 'none' 必须搭配 secure: true,否则浏览器拒绝设置,本地 http 下禁用
  • 若用 Vite/HMR 开发前端,注意其 dev server 默认跨域,需在 vite.config.ts 中配 server.proxy 避免 Referer 变成 proxy 地址

真实防御的关键不在 token 生成多复杂,而在于每次交互都强制双向验证:服务端给的 cookie 值,必须和服务端收到的 header 值完全一致,且这个 pair 只对当前会话有效。本地测试时,任何绕过、缓存、硬编码或属性遗漏,都会让整个防护形同虚设。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode node

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

1135

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

2252

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1789

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1587

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

2487

12

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1738

14

vscode用途介绍
vscode用途介绍

Visual Studio Code(VSCode)是一款由 Microsoft 开发的多功能文本编辑器,适用于各种编程语言。作为一款开源软件,VSCode 拥有代码高亮、自动补全、调试、Git 集成等强大功能,成为程序员不可或缺的工具。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1202

10

vscode和visualstudio的区别
vscode和visualstudio的区别

Visual Studio是一款功能强大的集成开发环境(IDE),适用于专业开发人员进行复杂项目的构建。而VSCode则是一款轻量级的代码编辑器,更适合各种规模的项目开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1076

8

vscode设置中文界面不生效解决方法
vscode设置中文界面不生效解决方法

vscode设置中文界面不生效解决方法:安装中文语言包、通过命令面板设置语言、检查 locale.json 设置、重新安装中文语言包、检查 VSCode 版本和更新、排除插件冲突、检查系统语言设置、查看 VSCode 日志和错误消息、重置 VSCode 设置、查看官方文档和社区支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

394

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程