>백엔드 개발 >PHP 튜토리얼 >웹사이트의 웹 서버 측에서 사용자 IP를 실제로 제한할 수 있습니까?

웹사이트의 웹 서버 측에서 사용자 IP를 실제로 제한할 수 있습니까?

WBOY
WBOY원래의
2016-10-11 14:23:46933검색

방금 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>

웹사이트의 웹 서버 측에서 사용자 IP를 실제로 제한할 수 있습니까?

해결책이 생각났습니다.nginx를 구성할 때 Proxy_set_header X-Forward-For $remote_addr 구성을 추가하세요. 그런 다음 $_SERVER["HTTP_X_FORWARD_FOR"]는 사용자의 실제 IP를 얻은 다음 프로그램에서 IP를 제한합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.