首頁 >後端開發 >Golang >如何在 Go 中有效限製表單請求大小?

如何在 Go 中有效限製表單請求大小?

Barbara Streisand
Barbara Streisand原創
2024-12-01 19:45:13677瀏覽

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.

全域大小限制

要對所有處理程序強制執行大小限制,請建立一個包裝處理程序並如下設定它:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn