Définir des limites de taille pour les demandes de formulaire dans Go
Contrôler la taille des demandes de formulaire est crucial pour éviter la monopolisation des ressources et les risques de sécurité. Bien que Go impose déjà une limite de 10 Mo pour les requêtes POST, une limitation supplémentaire de la taille peut être nécessaire dans certains scénarios.
Pour limiter la taille dans votre méthode ServeHTTP, utilisez l'approche suivante :
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) }
Gestion des erreurs
Lorsque la limite est atteinte, MaxBytesReader définit un indicateur sur le réponse. Par conséquent, le serveur met fin à la connexion en quittant le gestionnaire. Cette approche empêche efficacement une consommation excessive de données.
Mesures de sécurité supplémentaires
Pour une protection renforcée contre les clients malveillants, envisagez de définir des délais d'attente de serveur supplémentaires : Server.ReadTimeout, Server.WriteTimeout, et potentiellement Server.MaxHeaderBytes.
Taille globale Limite
Pour appliquer une limite de taille à tous les gestionnaires, créez un gestionnaire wrapper et configurez-le comme suit :
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})) }
Conclusion
L'utilisation de MaxBytesReader limite efficacement la taille des requêtes de formulaire et garantit que les clients malveillants ne peuvent pas exploiter les ressources de votre serveur. Pour une protection complète, combinez cette approche avec des délais d'attente supplémentaires et des limites de taille d'en-tête.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!