Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengehadkan Saiz Permintaan Borang dengan Berkesan dalam Go?

Bagaimana untuk Mengehadkan Saiz Permintaan Borang dengan Berkesan dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-01 19:45:13673semak imbas

How to Effectively Limit Form Request Sizes in Go?

Menetapkan Had Saiz untuk Permintaan Borang dalam Go

Mengawal saiz permintaan borang adalah penting untuk mengelakkan penggodam sumber dan risiko keselamatan. Walaupun Go sudah mengenakan had 10MB untuk permintaan POST, pengehadan lagi saiz mungkin diperlukan dalam senario tertentu.

Untuk mengehadkan saiz dalam kaedah ServeHTTP anda, gunakan pendekatan berikut:

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)
}

Pengendalian Ralat

Apabila had dicapai, MaxBytesReader menetapkan bendera pada respons. Akibatnya, pelayan menamatkan sambungan apabila keluar dari pengendali. Pendekatan ini berkesan menghalang penggunaan data yang berlebihan.

Langkah Keselamatan Tambahan

Untuk perlindungan yang dipertingkatkan terhadap pelanggan berniat jahat, pertimbangkan untuk menetapkan tamat masa pelayan tambahan: Server.ReadTimeout, Server.WriteTimeout, dan berpotensi Server.MaxHeaderBytes.

Saiz Global Had

Untuk menguatkuasakan had saiz merentas semua pengendali, buat pengendali pembalut dan konfigurasikannya seperti berikut:

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}))
}

Kesimpulan

Menggunakan MaxBytesReader dengan berkesan mengehadkan saiz permintaan borang dan memastikan pelanggan berniat jahat tidak dapat mengeksploitasi pelayan anda. sumber. Untuk perlindungan menyeluruh, gabungkan pendekatan ini dengan tamat masa tambahan dan had saiz pengepala.

Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Saiz Permintaan Borang dengan Berkesan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn