Go でのフォーム リクエストのサイズ制限の設定
フォーム リクエストのサイズを制御することは、リソースの占有とセキュリティ リスクを防ぐために重要です。 Go はすでに POST リクエストに 10MB の制限を課していますが、特定のシナリオではさらにサイズを制限する必要がある場合があります。
ServeHTTP メソッドでサイズを制限するには、次のアプローチを使用します。
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize) err := r.ParseForm() if err != nil { return // Handle error (e.g., redirect or set error status code) }
エラー処理
制限に達すると、MaxBytesReader はフラグを設定します応答。その結果、サーバーはハンドラーを終了するときに接続を終了します。このアプローチは、過剰なデータ消費を効果的に防止します。
追加のセキュリティ対策
悪意のあるクライアントに対する保護を強化するには、追加のサーバー タイムアウトの設定を検討してください: Server.ReadTimeout、Server.WriteTimeout、潜在的に Server.MaxHeaderBytes.
グローバル サイズLimit
すべてのハンドラーにわたってサイズ制限を適用するには、ラッパー ハンドラーを作成し、次のように構成します。
type maxBytesHandler struct { h http.Handler n int64 } func (h *maxBytesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { r.Body = http.MaxBytesReader(w, r.Body, h.n) h.h.ServeHTTP(w, r) } func main() { log.Fatal(http.ListenAndServe(":8080", &maxBytesHandler{h: mux, n: 4096})) }
結論
MaxBytesReader を使用すると、フォーム要求のサイズが効果的に制限され、悪意のあるクライアントがサーバーのリソースを悪用できなくなります。包括的な保護を実現するには、このアプローチと追加のタイムアウトおよびヘッダー サイズ制限を組み合わせます。
以上がGo でフォームリクエストのサイズを効果的に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。