3.1 KiB
3.1 KiB
HTTP Middleware Bảo Mật
Gói này cung cấp các middleware bảo mật cho ứng dụng HTTP sử dụng Gin framework.
Các Middleware Đã Có
-
CORS (Cross-Origin Resource Sharing)
- Kiểm soát truy cập tài nguyên từ các domain khác
- Hỗ trợ preflight requests
- Tùy chỉnh headers và methods cho phép
-
Rate Limiting
- Giới hạn số lượng request từ một IP trong khoảng thời gian nhất định
- Hỗ trợ loại trừ các route khỏi việc giới hạn
- Tự động dọn dẹp các bộ đếm cũ
-
Security Headers
- Thêm các HTTP headers bảo mật vào response
- Hỗ trợ CSP, HSTS, X-Frame-Options, v.v.
- Tùy chỉnh các chính sách bảo mật
Cách Sử Dụng
import (
"github.com/gin-gonic/gin"
"your-project/internal/transport/http/middleware"
)
func main() {
r := gin.New()
// Lấy cấu hình mặc định
config := middleware.DefaultSecurityConfig()
// Tùy chỉnh cấu hình nếu cần
config.CORS.AllowedOrigins = []string{"https://example.com"}
config.RateLimit.Rate = 100 // 100 requests mỗi phút
config.Headers.ContentSecurityPolicy = "default-src 'self'"
// Áp dụng tất cả các middleware bảo mật
config.Apply(r)
// Thêm các route của bạn ở đây
r.GET("/api/health", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
})
// Khởi động server
r.Run(":8080")
}
Cấu Hình Chi Tiết
CORS
type CORSConfig struct {
AllowedOrigins []string `yaml:"allowed_origins"`
AllowedMethods []string `yaml:"allowed_methods"`
AllowedHeaders []string `yaml:"allowed_headers"`
ExposedHeaders []string `yaml:"exposed_headers"`
AllowCredentials bool `yaml:"allow_credentials"`
MaxAge time.Duration `yaml:"max_age"`
Debug bool `yaml:"debug"`
}
Rate Limiting
type RateLimiterConfig struct {
Rate int `yaml:"rate"`
Window time.Duration `yaml:"window"`
ExcludedRoutes []string `yaml:"excluded_routes"`
}
Security Headers
type SecurityHeadersConfig struct {
Enabled bool `yaml:"enabled"`
ContentSecurityPolicy string `yaml:"content_security_policy"`
CrossOriginResourcePolicy string `yaml:"cross_origin_resource_policy"`
CrossOriginOpenerPolicy string `yaml:"cross_origin_opener_policy"`
CrossOriginEmbedderPolicy string `yaml:"cross_origin_embedder_policy"`
ReferrerPolicy string `yaml:"referrer_policy"`
FeaturePolicy string `yaml:"feature_policy"`
FrameOptions string `yaml:"frame_options"`
XSSProtection string `yaml:"xss_protection"`
ContentTypeOptions string `yaml:"content_type_options"`
StrictTransportSecurity string `yaml:"strict_transport_security"`
PermissionsPolicy string `yaml:"permissions_policy"`
}
Kiểm Thử
Chạy các test bằng lệnh:
go test -v ./...
Giấy Phép
MIT