IP 주소는 HTTP보다 낮은 수준에서 처리됩니다. 특히 IP 주소는 TCP/IP 프로토콜로 처리됩니다. Can I trust the source IP of an HTTP request?은 HTTP 클라이언트에서 가져온 IP가 신뢰할 수 있고 스푸핑하기 어려운 이유에 대한 개요를 제공합니다.
즉, HTTP 헤더는 TCP에서 얻은 IP 주소가 "잘못됨"을 나타내는 아이디어를 지원합니다. 가장 일반적인 방법은 X-Forwarded-For 헤더입니다. 서버를 가정하면 (! 아마 안 함), 당신은 아주 쉽게 당신의 IP 스푸핑 수이 값에 의존 :
물론
req, err := http.NewRequest("GET", "http://example.com", nil)
// ...
req.Header.Add("X-Forwarded-For", "1.2.3.4")
resp, err := client.Do(req)
, 대부분의 서버는이 필드에 의존하지 않습니다, 남용의 가능성으로 크다.
자신의 서버에 대한 테스트 도구를 작성하는 경우 서버에 논리를 추가하여 X-Forwarded-For
헤더 (또는 비슷한 이름)가 있는지 확인하고 설정된 경우 IP 주소를 무시하는 것이 가장 좋습니다 . 하지만 프로덕션 환경에서이 기능을 사용 중지해야합니다.
IP 주소를 스푸핑하는 것은 너무 어려울 것입니다. 서버에 직접 접속하여 요청 객체를 생성 할 수 있습니까? –