방금 nginx 포워딩 업스트림 및 포워딩 소스 IP 변경에 대해 질문했습니다. 액세스 요청 소스의 IP는 마음대로 변경될 수 있으므로 웹 서버에서 얻은 IP는 완전히 신뢰할 수 없습니다. 사용자의 실제 IP를 제한하는 것입니까, 아니면 이 경로가 실제로 가능하지 않은 것입니까?
방금 nginx 포워딩 업스트림 및 포워딩 소스 IP 변경에 대해 질문했습니다. 액세스 요청 소스의 IP는 마음대로 변경될 수 있으므로 웹 서버에서 얻은 IP는 완전히 신뢰할 수 없습니다. 사용자의 실제 IP를 제한하는 것입니까, 아니면 이 경로가 실제로 가능하지 않은 것입니까?
nginx는 [당신]이 만들었나요, 아니면 [금지된 사용자]가 만들어야 하나요?
HTTP_X_FORWARD_FOR은 위조될 수 있지만 REMOTE_ADDR은 변경할 수 없습니다.
[차단된 사용자]에 의해 구축된 경우:
$_SERVER["REMOTE_ADDR"]를 통해 nginx 서버의 IP를 얻어 직접 차단할 수 있습니다.
nginx를 구축한 경우:
$_SERVER["HTTP_X_FORWARD_FOR"]를 통해 사용자의 IP를 얻을 수 있지만 위조되었을 수 있습니다.
<code>proxy_set_header X-Forward-For $remote_addr</code>
가장 좋은 방법은 비공개 HTTP 헤더를 추가하는 것입니다. nginx가 전달할 때 비공개 http 헤더를 추가하면 무엇을 위조해야 할지 모르겠습니다.
<code>proxy_set_header X-GAGAGA $remote_addr</code>
또한 현재 Alibaba의 WW에서 사용하는 프록시 플랫폼의 HL 시스템은 HTTP_X_FORWARD_FOR에 의해 엄격하게 필터링되지 않으며 신중하게 구성된 요청이 주입될 수 있습니다. . . (이제 새 버전이 수정되었습니다.)
위조와 관련하여 Linux/Unix/OSX를 사용하는 경우 내장된 컬을 사용하여 위조할 수 있습니다.
<code>curl abc.com/test.php -H "X-FORWARD-FOR:8.8.8.8"</code>
필터링이 없으면 IP를 통해 블랙리스트에 올릴 것인지, 아니면 백그라운드에서 IP 작업 로그를 기록할 것인지 직접 결정하는 기능이 있는 경우도 있습니다.
<code>#想注入就注入 curl miaoqiyuan.cn/test.php -H "X-FORWARD-FOR:' or 'a'='a" #想XSS就XSS curl miaoqiyuan.cn/test.php -H "X-FORWARD-FOR:alert('a')"</code>
해결책이 생각났습니다.nginx를 구성할 때 Proxy_set_header X-Forward-For $remote_addr 구성을 추가하세요. 그런 다음 $_SERVER["HTTP_X_FORWARD_FOR"]는 사용자의 실제 IP를 얻은 다음 프로그램에서 IP를 제한합니다.