보안을 위해 Go에서 양식 크기 제한
POST 양식 요청을 처리하기 위해 Go의 http 패키지를 사용할 때 요청 본문 크기의 기본 제한은 다음과 같습니다. 10MB. 대부분의 경우 이것으로 충분할 수 있지만 보안 위험을 완화하기 위해 이 제한을 줄이는 것이 바람직한 상황이 있을 수 있습니다.
양식 크기를 추가로 제한하려면 http.MaxBytesReader 함수를 사용하는 것이 좋습니다. 이 함수는 요청 본문에서 읽을 수 있는 최대 바이트 수를 제한하는 새로운 판독기를 생성합니다. 예:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize) err := r.ParseForm() if err != nil { // Redirect to error page return }
요청 본문을 http.MaxBytesReader로 래핑하면 파일 크기가 지정된 MaxFileSize 제한을 초과하는 경우 요청 구문 분석이 종료됩니다. 그러나 오류 플래그를 설정해도 연결이 자동으로 닫히지 않는다는 점에 유의하는 것이 중요합니다. 권장되는 접근 방식은 Server.ReadTimeout을 사용하여 요청 구문 분석에 대한 시간 제한을 설정하는 것입니다.
여러 핸들러를 처리하고 이 제한을 전역적으로 구현하려는 경우 다음과 같은 미들웨어 기능을 사용할 수 있습니다.
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) }
그런 다음 이 미들웨어를 루트 핸들러 주변에 래핑하여 모든 요청에 크기 제한이 적용되도록 할 수 있습니다.
이러한 기술을 구현하면 다음이 가능합니다. POST 양식 요청의 크기를 효과적으로 제한하여 악의적인 행위자가 과도한 리소스 소비나 서비스 거부 공격을 악용하는 것을 방지합니다.
위 내용은 보안 취약점을 방지하기 위해 Go에서 POST 양식 크기를 안전하게 제한하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!