当前位置: 首页 > news >正文

Web安全:CSRF跨站请求伪造详解

Web安全:CSRF跨站请求伪造详解

1. CSRF概述

CSRF(Cross-Site Request Forgery)是一种利用用户已登录的身份,在用户不知情的情况下发起恶意请求的攻击。

2. CSRF攻击原理

1. 用户登录网站A,获取有效Session 2. 攻击者诱导用户访问恶意网站B 3. 网站B中包含向网站A发送请求的代码 4. 浏览器自动携带Cookie发送请求 5. 网站A执行恶意操作

3. CSRF防护措施

3.1 CSRF Token

import "github.com/gin-contrib/sessions" func CSRFMiddleware() gin.HandlerFunc { return func(c *gin.Context) { session := sessions.Default(c) token := session.Get("csrf_token") if c.Request.Method == "POST" { requestToken := c.PostForm("csrf_token") if requestToken == "" { c.AbortWithStatus(403) return } if requestToken != token { c.AbortWithStatus(403) return } } // 生成新Token newToken := generateToken() session.Set("csrf_token", newToken) c.Set("csrf_token", newToken) c.Next() } } // 在表单中嵌入Token func renderForm(c *gin.Context) { token := c.MustGet("csrf_token").(string) c.HTML(200, "form.html", gin.H{ "csrf_token": token, }) }

3.2 SameSite Cookie

import "github.com/gin-gonic/gin/sessions" session.Options(sessions.Options{ Path: "/", MaxAge: 86400 * 7, HttpOnly: true, Secure: true, SameSite: http.SameSiteStrictMode, // 防止CSRF })

3.3 双重提交Cookie

// 前端设置Cookie document.cookie = 'csrf-token=' + token; // 发送请求时同时发送Cookie和Header fetch('/api/action', { method: 'POST', credentials: 'include', // 包含Cookie headers: { 'X-CSRF-Token': token, }, body: JSON.stringify(data) })

4. 验证请求来源

4.1 Referer/Origin检查

func OriginCheckMiddleware() gin.HandlerFunc { return func(c *gin.Context) { if c.Request.Method == "POST" { referer := c.GetHeader("Referer") origin := c.GetHeader("Origin") allowedDomain := "https://example.com" if referer != "" && !strings.HasPrefix(referer, allowedDomain) { c.AbortWithStatus(403) return } } c.Next() } }

5. 前端防护

5.1 React CSRF防护

class SafeForm extends React.Component { state = { csrfToken: '' }; componentDidMount() { this.setState({ csrfToken: window.csrfToken }); } handleSubmit = async (e) => { e.preventDefault(); const response = await fetch('/api/action', { method: 'POST', credentials: 'include', headers: { 'X-CSRF-Token': this.state.csrfToken, 'Content-Type': 'application/json', }, body: JSON.stringify(this.props.data) }); }; render() { return ( <form onSubmit={this.handleSubmit}> {/* 表单内容 */} </form> ); } }

6. 总结

CSRF通过利用用户已登录的身份发起恶意请求,防护措施包括CSRF Token、SameSite Cookie、请求来源验证等。最佳实践是同时使用多种防护手段。

http://www.jsqmd.com/news/806102/

相关文章:

  • KMeans核心原理与关键代码实现
  • 2026南京钢管租赁技术指南与合规供应商盘点:方管租赁/江苏盘扣租赁/江苏钢管租赁/盘扣式脚手架租赁/脚手架钢管/选择指南 - 优质品牌商家
  • Pytorch图像去噪实战(七十二):Alertmanager告警实战,接口错误率和GPU显存异常自动通知
  • 面试自我介绍别背简历:数据人应该讲清楚这 3 件事
  • 杭州房屋租赁首选:专业的房屋租赁排名靠前的
  • 达梦 8 数组类型使用测试
  • 酒店餐饮企业公司注册服务优质机构推荐 - 优质品牌商家
  • Windows安卓应用安装神器:APK-Installer终极使用指南
  • 从Demo到生产:构建高可用AI智能体的工程化实践
  • 2026年高评价吨袋自动包装机推荐 附核心参数对比 - 优质品牌商家
  • AgentLint:AI助手配置文件质量检查工具,提升开发效率与安全性
  • MCP Pool:基于Model Context Protocol构建AI助手与SaaS数据桥接方案
  • 私有化部署验签引擎:大型企业数据安全与合规的终极方案
  • 5分钟掌握数据主权:WeChatMsg微信聊天记录导出与永久保存完全指南
  • 2026年5月更新:电缆回收企业选型指南,宁波皓诚再生资源有限公司深度解析 - 2026年企业推荐榜
  • goxam 界面不刷新的问题,需要滚轮或者重新加载才能显示
  • 2026年靠谱代账品牌盘点:公司注册流程/成都公司注册/无地址公司注册/电商代账/从资质到售后的硬核筛选 - 优质品牌商家
  • WindowResizer终极教程:3分钟掌握Windows窗口大小调整神器
  • 为什么92%的前端团队仍在手动运行tsc?Claude实时类型推导已悄然替代——48小时紧急迁移手册
  • 2026年知名的线控EPS带转向器总成/台州转向器主流厂家对比评测 - 品牌宣传支持者
  • Python-pptx进阶玩法:给你的PPT图表加上动态数据,告别静态截图
  • 2026年方管租赁专业选型指南:附近盘扣租赁站及电话、附近钢管租赁站及电话、南京盘扣租赁、南京钢管租赁、扣件租赁选择指南 - 优质品牌商家
  • MS35629 具有静音和堵转检测功能的 36V、1.5A 两相 S/D 步进电机驱动芯片
  • 第二篇:基于 RA-ECO-RA4M2 开发板的四轮小车运动控制评测
  • 【Claude 3.5 Sonnet深度解析】:5大颠覆性新功能实测对比,开发者必须立即掌握的AI生产力跃迁指南
  • 0304光刻机突围全景:第三卷 双工件台+纳米级精密运动控制 国产精度优化方案
  • 怎样快速免费完成QQ音乐格式转换:完整实用手册
  • GitHub Explorer Skill:AI Agent驱动的开源项目深度分析工具实战
  • 2026年5月新消息:钨丝回收价格走势与专业服务商福荣金属回收深度剖析 - 2026年企业推荐榜
  • ARM GIC中断控制器与GICR_WAKER寄存器详解