Menghadkan Saiz Borang dalam Go for Security
Apabila menggunakan pakej http Go untuk mengendalikan permintaan borang POST, had lalai untuk saiz badan permintaan ialah 10MB. Walaupun ini mungkin mencukupi untuk banyak kes, mungkin terdapat situasi di mana pengurangan had ini dinasihatkan untuk mengurangkan risiko keselamatan.
Untuk mengehadkan lagi saiz borang, pendekatan yang dicadangkan ialah menggunakan fungsi http.MaxBytesReader. Fungsi ini mencipta pembaca baharu yang mengehadkan bilangan maksimum bait yang boleh dibaca daripada badan permintaan. Contohnya:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize) err := r.ParseForm() if err != nil { // Redirect to error page return }
Dengan membungkus badan permintaan dengan http.MaxBytesReader, penghuraian permintaan akan ditamatkan jika saiz fail melebihi had yang ditentukan MaxFileSize. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa menetapkan bendera ralat tidak menutup sambungan secara automatik. Pendekatan yang disyorkan ialah menetapkan had masa untuk menghurai permintaan menggunakan Server.ReadTimeout.
Jika anda mengendalikan berbilang pengendali dan ingin melaksanakan had ini secara global, anda boleh menggunakan fungsi middleware seperti:
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) }
Perisian tengah ini kemudiannya boleh dililitkan pada pengendali akar, memastikan semua permintaan tertakluk pada had saiz.
Dengan melaksanakan teknik ini, anda boleh mengehadkan saiz permintaan borang POST dengan berkesan, menghalang pelakon berniat jahat daripada mengeksploitasi penggunaan sumber yang berlebihan atau serangan penafian perkhidmatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengehadkan Saiz Borang POST dengan Selamat dalam Go untuk Mencegah Kerentanan Keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!