fiber框架中启用csrf防护中间件可防止恶意表单提交或状态变更攻击;支持双提交cookie模式(无需会话)和基于session/redis的存储模式,需注意注册顺序、令牌传递方式及安全配置。

在Fiber框架中启用CSRF防护中间件,是为了防止攻击者利用用户已登录的身份,在其不知情时提交恶意表单或发起状态变更请求,比如修改邮箱、转账、删除数据等操作。
启用CSRF中间件(无会话存储场景)
第一步:确保未配置会话中间件(如`fiber/session`),此时Fiber自动采用双提交Cookie模式,无需额外依赖。
第二步:在应用初始化处调用app.Use(csrf.New()),中间件将自动生成并注入CSRF令牌到响应Cookie中。
第三步:对所有不安全HTTP方法(POST/PUT/DELETE/PATCH)的路由启用校验——该行为默认开启,无需手动指定方法白名单。
注意:此模式下令牌仅存储在内存中,重启服务后所有现有令牌失效;适用于开发环境或轻量级无状态API服务。
启用CSRF中间件(基于会话存储)
方法一:使用fiber/session配合CSRF中间件
安装session包:go get github.com/gofiber/session/v2
初始化会话存储并传入CSRF中间件:store := session.New() → app.Use(csrf.New(csrf.Config{Session: store}))
方法二:使用Redis等外部存储提升可靠性
创建Redis存储实例:store := session.New(session.Config{Storage: redis.New(...)}) → 再传入CSRF配置。
【必须确保Session中间件在CSRF中间件之前注册】,否则会话无法被读取,导致令牌验证始终失败。
前端获取并携带CSRF令牌
方式1:从Cookie中读取_csrf字段(双提交模式默认名),在AJAX请求头中设置:X-Csrf-Token: [value]。
方式2:在HTML表单中插入隐藏域:<input type="hidden" name="_csrf" value="{{.CSRFToken}}">——需在模板渲染时通过c.Locals("csrf")传递值。
方式3:直接调用c.Get("X-Csrf-Token")从请求头提取,适用于前后端分离架构下的API调用。
注意:若使用方式1或3,前端JavaScript需确保Cookie可被脚本读取(即CSRF Cookie配置中HttpOnly: false);但此举会略微增加XSS风险,应配合CSP策略使用。
自定义CSRF配置参数
调整令牌有效期与安全属性:
csrf.New(csrf.Config{
Cookie: &csrf.CookieConfig{
HttpOnly: true,
Secure: true, // 生产环境必须为true
SameSite: "Strict",
MaxAge: 3600,
},
KeyLookup: "header:X-Csrf-Token",
ContextKey: "csrf",
)
【Secure: true仅在HTTPS下生效,HTTP环境下设置会导致Cookie不被发送】,本地开发可临时设为false,但上线前必须改回true。











