package middleware import ( "github.com/gin-gonic/gin" ) // SecurityHeaders 安全响应头中间件 // 为所有响应添加安全头,降低 XSS、点击劫持、MIME 嗅探等风险。 // secure=true 时额外下发 HSTS(仅 HTTPS origin 合法,HTTP 环境发 HSTS 属于误导)。 func SecurityHeaders(secure bool) gin.HandlerFunc { return func(c *gin.Context) { // CSP:限制资源加载来源,降低 XSS 危害 c.Header("Content-Security-Policy", "default-src 'self'; "+ "script-src 'self' 'unsafe-inline'; "+ "style-src 'self' 'unsafe-inline'; "+ "img-src 'self' data: https:; "+ "font-src 'self' data:; "+ "connect-src 'self'; "+ "frame-ancestors 'none'; "+ "base-uri 'self'; "+ "form-action 'self'") // HSTS:仅 HTTPS origin 下发。HTTP 响应发 HSTS 是无效且误导的。 if secure { c.Header("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload") } // 点击劫持防护 c.Header("X-Frame-Options", "DENY") // MIME 嗅探防护 c.Header("X-Content-Type-Options", "nosniff") // 控制 Referer 信息泄露 c.Header("Referrer-Policy", "strict-origin-when-cross-origin") c.Next() } }