ホームページ > バックエンド開発 > Golang > セキュリティの脆弱性を防ぐために、Go で POST フォームのサイズを安全に制限するにはどうすればよいですか?

セキュリティの脆弱性を防ぐために、Go で POST フォームのサイズを安全に制限するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-29 21:34:13
オリジナル
776 人が閲覧しました

How Can I Securely Limit POST Form Size in Go to Prevent Security Vulnerabilities?

セキュリティのために 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート