首页
/ 使用Solo.io Gloo实现CSRF防护的完整指南

使用Solo.io Gloo实现CSRF防护的完整指南

2025-06-12 20:53:53作者:胡唯隽

什么是CSRF攻击

跨站请求伪造(CSRF)是一种常见的Web安全威胁,攻击者利用用户已认证的身份,诱导用户执行非预期的操作。这种攻击可能导致用户数据被篡改、资金转移等严重后果。

CSRF攻击的本质在于:攻击者利用用户浏览器对目标网站的信任,伪造请求并利用用户的认证状态执行恶意操作。

CSRF防护的多层防御策略

在Web应用安全领域,防御CSRF攻击通常采用多层策略:

  1. 应用层防御:大多数现代Web框架都内置了CSRF防护机制
  2. 网关层防御:在API网关层面实施防护,减轻应用层负担
  3. WAF防护:使用Web应用防火墙进行规则匹配防护

Solo.io Gloo作为API网关解决方案,提供了在网关层实施CSRF防护的能力,可以有效减轻后端应用的安全负担。

实验环境搭建

部署Httpbin服务

Httpbin是一个常用的HTTP请求测试服务,我们将使用它作为演示后端:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: httpbin

apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      version: v1
  template:
    metadata:
      labels:
        app: httpbin
        version: v1
    spec:
      serviceAccountName: httpbin
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 80

创建Gloo虚拟服务

配置Gloo将请求路由到Httpbin服务:

apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
  name: httpbin
  namespace: gloo-system
spec:
  virtualHost:
    domains:
    - '*'
    routes:
    - matchers:
      - prefix: /
      routeAction:
        single:
          upstream:
            name: default-httpbin-8000
            namespace: gloo-system

CSRF防护机制详解

Envoy CSRF过滤器原理

Gloo利用Envoy的CSRF过滤器实现防护,其核心验证逻辑是:

  1. 检查请求是否包含Origin或X-Origin头部
  2. 验证头部值与目标主机是否匹配
  3. 对于不匹配的请求返回403错误

测试模式(Test Mode)

在正式启用防护前,可以先使用测试模式评估防护效果:

options:
  csrf:
    testEnabled:
      defaultValue:
        numerator: 100  # 采样率100%
        denominator: HUNDRED

测试模式会记录但不拦截非法请求,通过监控指标观察防护效果:

curl -s http://localhost:19000/stats | grep csrf

启用强制防护

确认配置无误后,切换为强制模式:

options:
  csrf:
    filterEnabled:
      defaultValue:
        numerator: 100
        denominator: HUNDRED

此时非法请求将被拦截:

# 不匹配的Origin头部
curl -X POST "$(glooctl proxy url)/post" -H "origin: http://example.com" -i
# 返回: HTTP/1.1 403 Forbidden

配置例外域名

某些场景需要允许特定域名的请求,可通过additionalOrigins配置:

additionalOrigins:
  - suffix: example.com  # 允许所有example.com子域名

最佳实践建议

  1. 渐进式部署:先使用测试模式验证,再逐步启用强制防护
  2. 细粒度控制:可根据需要在不同层级(全局、虚拟主机、路由)应用策略
  3. 监控指标:定期检查csrf_request_invalid等指标评估防护效果
  4. 结合其他安全措施:CSRF防护应与认证、WAF等安全机制配合使用

常见问题排查

  1. 误拦截合法请求:检查additionalOrigins配置是否完整
  2. 防护未生效:确认filterEnabled已设置且采样率为100%
  3. 指标不更新:验证指标端口(19000)是否可访问

通过本文介绍的方法,您可以在Solo.io Gloo网关中有效实施CSRF防护,为后端应用提供额外的安全层保护。

登录后查看全文

项目优选

收起
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
600
424
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
15
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
128
209
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
87
146
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
474
39
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
103
255
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
299
1.03 K
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
693
92
markdown4cjmarkdown4cj
一个markdown解析和展示的库
Cangjie
33
4
JeecgBootJeecgBoot
🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~
Java
95
17