0

0

前端安全_CSRF防护JavaScript实现

夢幻星辰

夢幻星辰

发布时间:2025-11-30 19:13:31

|

576人浏览过

|

来源于php中文网

原创

CSRF防护需前后端协同,前端可通过SameSite Cookie、自定义请求头、同步Token及双重Cookie提交等措施辅助防御,核心在于配合后端实现安全策略。

前端安全_csrf防护javascript实现

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的前端安全漏洞,攻击者诱导用户在已登录的状态下执行非本意的操作。虽然主要防护应在后端实现,但前端可以通过一些手段配合提升安全性。以下是基于 JavaScript 的常见 CSRF 防护实践与实现方式。

理解CSRF攻击原理

CSRF 利用用户在目标网站的认证状态,通过第三方站点发起伪造请求。例如:用户登录了银行系统,未退出的情况下访问恶意网站,该网站自动提交一个转账请求到银行系统,而浏览器会自动携带用户的 Cookie,导致请求被合法执行。

关键点在于:攻击者无法获取用户的 Cookie,但可以利用浏览器自动携带 Cookie 的机制发起请求。

前端可参与的防护措施

虽然 CSRF 防护的核心逻辑通常由后端完成,前端仍可通过以下方式协助防御:

立即学习Java免费学习笔记(深入)”;

1. 使用 SameSite Cookie 属性(推荐)

设置 Cookie 的 SameSite 属性为 StrictLax,可有效阻止跨站请求携带 Cookie。

示例(由服务端设置):

Set-Cookie: session=abc123; Path=/; Secure; HttpOnly; SameSite=Lax

前端虽不能直接设置此属性,但应确保与后端协作启用该策略。

2. 添加自定义请求头(如 X-Requested-With)

前端在发送敏感请求时,添加自定义请求头(如 X-Requested-With: XMLHttpRequest),后端校验该头是否存在。

使用 fetch 示例:

fetch('/api/transfer', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Requested-With': 'XMLHttpRequest'
  },
  body: JSON.stringify({ to: 'user2', amount: 100 })
})

后端需检查该头,若缺失则拒绝请求。注意:此方法依赖同源策略,防止第三方脚本伪造该头。

3. 同步 Token 模式(Synchronizer Token Pattern)

后端生成一次性 Token,嵌入页面(如隐藏字段或 meta 标签),前端在请求中携带该 Token,后端验证其有效性。

绘蛙
绘蛙

电商场景的AI创作平台,无需高薪聘请商拍和文案团队,使用绘蛙即可低成本、批量创作优质的商拍图、种草文案

下载

实现步骤:

  • 后端渲染页面时注入 Token:
<meta name="csrf-token" content="abc123xyz">
  • JavaScript 读取并附加到请求头:
const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

fetch('/api/delete', {
  method: 'DELETE',
  headers: {
    'X-CSRF-Token': token,
    'Content-Type': 'application/json'
  }
})

后端对比 Token 是否匹配,防止重放和伪造。

4. 双重 Cookie 提交(Double Submit Cookie)

前端在请求中额外添加一个与 Cookie 中相同的 Token 字段,后端比对两者是否一致。

流程:

  • 后端在 Set-Cookie 时写入 csrf-token=abc123
  • 前端读取该 Cookie(需非 HttpOnly),并在请求体或头中再次发送

示例(使用 axios):

// 假设从 Cookie 获取 token
const csrfToken = getCookie('csrf-token');

axios.post('/api/action', { 
  data: 'example', 
  csrfToken // 请求体中包含
});

后端验证请求中的 token 与 Cookie 中的一致性。此方法无需服务器存储 Token,适合分布式系统。

避免常见误区

前端不应单独依赖 Referer 或 Origin 头进行判断,这些信息可能被篡改或缺失。真正的验证必须由后端完成。

不要将敏感操作绑定在 GET 请求上,避免链接被恶意调用。

静态资源托管站点更需警惕,即使无登录态,若用户处于同一浏览器环境,仍可能受攻击影响。

基本上就这些。前端能做的有限,关键是与后端协同,确保 Token 机制或 SameSite 策略落地。安全是全链路的事,JavaScript 不是主角,但也不能缺席。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

407

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6500

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

368

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

446

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6609

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

842

2023.09.14

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

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

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号