1. 跨域攻击与防护
什么是跨域?
跨域(Cross-Origin) 是指在一个网站中请求另一个域名下的资源。现代Web应用通常采用前后端分离架构,前端和后端API往往部署在不同的域名下,这就产生了跨域场景。
同源策略(Same-Origin Policy): 浏览器的基础安全机制,限制一个源(Origin)的文档或脚本如何与另一个源的资源进行交互。
源(Origin)的定义: 协议 + 域名 + 端口,三者完全相同才算同源。
https://example.com:443/page1 ✅ 同源
https://example.com:443/page2
https://example.com ❌ 不同源 (协议不同)
http://example.com
https://example.com ❌ 不同源 (域名不同)
https://api.example.com
https://example.com:443 ❌ 不同源 (端口不同)
https://example.com:8080
1.2 跨域攻击场景
场景示例
假设你的应用架构如下:
- 前端:
https://example-frontend.com - 后端API:
https://api.example-backend.com
如果不进行适当的跨域配置和安全防护,可能面临以下风险:
- 恶意网站冒充前端向API发送请求
- CSRF攻击利用用户身份执行未授权操作
- 敏感数据被第三方网站窃取
1.3 防护策略
1.3.1 配置CORS (跨域资源共享)
CORS允许服务器声明哪些源可以访问其资源,是解决跨域问题的标准方案。
Gin框架实现:
package main
import (
"github.com/gin-gonic/gin"
"github.com/gin-contrib/cors"
"time"
)
func main() {
r := gin.Default()
// Method 1: Use cors middleware with strict configuration
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"https://example-frontend.com"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
MaxAge: 12 * time.Hour,
}))
r.GET("/api/data", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "Secure cross-origin data transfer"})
})
r.Run(":8080")
}
自定义CORS中间件:
CodeBlock Loading...
1.3.2 验证请求来源
CodeBlock Loading...
1.3.3 Cookie安全配置
CodeBlock Loading...
SameSite属性说明:
Strict: Cookie仅在同站请求时发送(最安全)Lax: 大多数跨站请求不发送Cookie(推荐)None: 所有请求都发送Cookie(需配合Secure)
2. CSRF攻击 (跨站请求伪造)
2.1 什么是CSRF?
CSRF (Cross-Site Request Forgery) 是一种攻击方式,攻击者诱导受害者在已登录的Web应用上执行非本意的操作。
2.2 攻击示例
CodeBlock Loading...
2.3 防护策略
2.3.1 CSRF Token
CodeBlock Loading...
2.3.2 前端使用示例
CodeBlock Loading...
2.3.3 SameSite Cookie
func SetSessionCookie(c *gin.Context, sessionID string) {
c.SetCookie(
"session_id",
sessionID,
3600,
"/",
"",
true,
true,
)
c.SetSameSite(http.SameSiteStrictMode)
}
2.3.4 Referer验证
CodeBlock Loading...
2.4 防护总结
CSRF防护清单:
- ✅ 使用CSRF Token(最推荐)
- ✅ 设置SameSite Cookie属性
- ✅ 验证Referer和Origin头
- ✅ 要求自定义请求头
- ✅ 对敏感操作进行二次确认
总结
本文详细介绍了跨域攻击和CSRF攻击的原理与防护方法。通过正确配置CORS、实施CSRF Token保护、设置安全的Cookie属性,可以有效防御这些攻击。
关键要点:
- 🔒 CORS配置要严格限制可信源
- 🛡️ CSRF Token是最有效的防护手段
- 🍪 Cookie的SameSite属性提供额外保护
- 🔍 多层防御策略显著提高安全性