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