説明
実行時のスタックトレースやpanicのダンプをHTTP応答へ直接書き込むと、内部のパッケージ構造、ファイルパス、実行時の情報が露出する可能性があります。
想定される影響
- 攻撃者が内部構造を調べ、追加の攻撃を具体化するおそれがあります。
- 一部の実行時の値やパスが機密情報として漏れる可能性があります。
対処方法
- 詳細なスタックトレースは保護されたサーバーログだけに記録し、機密の値を除いてください。
- ユーザーには一般的なエラーメッセージだけを返してください。
- ログへのアクセス権限と保存期間も制限してください。
例
変更前
go
w.Write(debug.Stack())
変更後
go
log.Print(string(debug.Stack()))
http.Error(w, "internal server error", http.StatusInternalServerError)
解説:
- 変更前: スタックトレースやpanicのダンプをHTTP応答に含めると、パッケージ、パス、フレームワーク構成、機密性のある実行時情報などが露出するおそれがあります。
- 変更後: 詳細なトレースはサーバーログだけへ記録し、クライアントには一般的なエラーメッセージを返します。