> 백엔드 개발 > Golang > Go에서 양식 요청 크기를 효과적으로 제한하는 방법은 무엇입니까?

Go에서 양식 요청 크기를 효과적으로 제한하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-01 19:45:13
원래의
675명이 탐색했습니다.

How to Effectively Limit Form Request Sizes in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿