Files
jiang13-bbs/backend/middleware/security.go

41 lines
1.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()
}
}