ユーザーアイコン

mizuko

3日前

0
0

Web APIのセキュリティヘッダー実装

Go
Gin
セキュリティ

Web APIサーバーにおいて、以下のHTTPセキュリティヘッダーを設定することで、様々な攻撃から防御できる。

必須のセキュリティヘッダー:

  1. X-Content-Type-Options: nosniff

    • MIMEタイプスニッフィングを防ぎ、宣言されたContent-Typeを厳格に適用
    • スクリプトインジェクション攻撃を防ぐ
  2. X-Frame-Options: DENY

    • iframeへの埋め込みを拒否し、クリックジャッキング攻撃を防ぐ
    • APIサーバーでは通常DENYが適切
  3. Referrer-Policy: strict-origin-when-cross-origin

    • リファラー情報の漏洩を制御
    • クロスオリジンリクエストでは完全なURLを送信しない
  4. Permissions-Policy

    • ブラウザ機能の使用を制限
    • 例: geolocation=(), microphone=(), camera=()
  5. Content-Security-Policy

    • XSS攻撃の最も強力な防御策
    • APIサーバーでは default-src 'none'; frame-ancestors 'none'; が適切
  6. Strict-Transport-Security (HTTPS環境のみ)

    • HTTPSを強制し、ダウングレード攻撃を防ぐ
    • max-age=31536000; includeSubDomains

Ginフレームワークでの実装例:

func SecurityHeaders() gin.HandlerFunc { return func(c *gin.Context) { c.Header("X-Content-Type-Options", "nosniff") c.Header("X-Frame-Options", "DENY") c.Header("Referrer-Policy", "strict-origin-when-cross-origin") c.Header("Permissions-Policy", "geolocation=(), microphone=(), camera=()") c.Header("Content-Security-Policy", "default-src 'none'; frame-ancestors 'none';") // HTTPS接続の場合のみHSTSを設定 if c.Request.TLS != nil || c.GetHeader("X-Forwarded-Proto") == "https" { c.Header("Strict-Transport-Security", "max-age=31536000; includeSubDomains") } c.Next() } }

これらのヘッダーを設定することで、OWASPトップ10の多くの脆弱性に対する防御層を追加できる。