ulflow_phattt2901 9df4673657
Some checks failed
CI Pipeline / Security Scan (push) Failing after 4m42s
CI Pipeline / Lint (push) Failing after 5m1s
CI Pipeline / Test (push) Has been skipped
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Notification (push) Successful in 2s
chore: Update config file
2025-05-25 15:22:23 +07:00

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ó

  1. 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
  2. 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ũ
  3. 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