21 lines
902 B
Go
21 lines
902 B
Go
package middleware
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// SecurityHeaders 统一补齐 HTTP 安全响应头,缓解点击劫持、MIME 嗅探等风险
|
|
func SecurityHeaders() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
h := c.Writer.Header()
|
|
h.Set("X-Content-Type-Options", "nosniff")
|
|
h.Set("X-Frame-Options", "DENY")
|
|
h.Set("Referrer-Policy", "no-referrer")
|
|
// 限制内联脚本/样式以缓解 XSS;允许同源与必要的外部资源
|
|
h.Set("Content-Security-Policy", "default-src 'self'; img-src 'self' data: blob:; media-src 'self' blob:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; connect-src 'self' ws: wss:; font-src 'self' data:; object-src 'none'; frame-ancestors 'none'")
|
|
// 仅在内网 HTTPS 网关后运行时生效;HTTP 下浏览器会忽略
|
|
h.Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
|
|
c.Next()
|
|
}
|
|
}
|