ホームページ >バックエンド開発 >Golang >Go でフォームリクエストのサイズを効果的に制限するにはどうすればよいですか?

Go でフォームリクエストのサイズを効果的に制限するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-01 19:45:13673ブラウズ

How to Effectively Limit Form Request Sizes in Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。