コンテンツにスキップ

クエリ文字列のロギングを回避

クエリ文字列にはAPIトークン、パスワード、セッションID、個人を特定できる情報(PII)などの機密情報が含まれることがよくあります。これらの値をロギングすると、セキュリティリスクが生じ、GDPRやHIPAAなどのプライバシー規制に違反する可能性があります。クエリ文字列をログから除去することで、ログファイル、モニタリングシステム、エラーレポートツールを通じて機密データが漏洩するリスクを軽減できます。

LoggerConfigSkipQueryStringオプションを使用して、クエリ文字列がログに表示されないようにします。有効にすると、/path?token=secret&user=aliceへのリクエストは単に/pathとしてログに記録されます。

func main() {
router := gin.New()
// SkipQueryStringはロガーがクエリ文字列をログに記録しないことを示します。
// 例えば、/path?q=1は/pathとしてログに記録されます
loggerConfig := gin.LoggerConfig{SkipQueryString: true}
router.Use(gin.LoggerWithConfig(loggerConfig))
router.Use(gin.Recovery())
router.GET("/search", func(c *gin.Context) {
q := c.Query("q")
c.String(200, "searching for: "+q)
})
router.Run(":8080")
}

curlで違いをテストできます:

Terminal window
curl "http://localhost:8080/search?q=gin&token=secret123"

SkipQueryStringなしの場合、ログエントリに完全なクエリ文字列が含まれます:

[GIN] 2025/06/01 - 15:04:05 | 200 | 102.4µs | 127.0.0.1 | GET "/search?q=gin&token=secret123"

SkipQueryString: trueの場合、クエリ文字列が除去されます:

[GIN] 2025/06/01 - 15:04:05 | 200 | 102.4µs | 127.0.0.1 | GET "/search"

これは、ログ出力がサードパーティサービスに転送されたり長期保存される、コンプライアンスが重要な環境で特に有用です。アプリケーションはc.Query()を通じてクエリパラメータに完全にアクセスできます。影響を受けるのはログ出力のみです。