セキュリティのために Go でのフォーム サイズを制限する
POST フォーム リクエストの処理に Go の http パッケージを使用する場合、リクエスト本文のサイズのデフォルト制限は次のとおりです。 10MB。多くの場合これで十分ですが、セキュリティ リスクを軽減するためにこの制限を減らすことが賢明な状況もあります。
フォーム サイズをさらに制限するには、http.MaxBytesReader 関数を使用する方法が推奨されます。この関数は、リクエスト本文から読み取ることができる最大バイト数を制限する新しいリーダーを作成します。例:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize) err := r.ParseForm() if err != nil { // Redirect to error page return }
リクエスト本文を http.MaxBytesReader でラップすると、ファイル サイズが指定された制限 MaxFileSize を超えるとリクエストの解析が終了します。ただし、エラー フラグを設定しても接続は自動的に閉じられないことに注意することが重要です。推奨されるアプローチは、Server.ReadTimeout を使用してリクエスト解析の時間制限を設定することです。
複数のハンドラーを処理し、この制限をグローバルに実装したい場合は、次のようなミドルウェア関数を使用できます。
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) }
このミドルウェアをルート ハンドラーにラップして、すべてのリクエストがサイズ制限の対象となるようにすることができます。
これらの手法を実装することで、次のことが可能になります。 POST フォーム リクエストのサイズを効果的に制限し、悪意のある攻撃者による過度のリソース消費やサービス拒否攻撃の悪用を防ぎます。
以上がセキュリティの脆弱性を防ぐために、Go で POST フォームのサイズを安全に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。