$ _SERVER [ 'REMOTE_ADDR']을 신뢰하는 것이 안전합니까?


89

신뢰하는 것이 안전 $_SERVER['REMOTE_ADDR']합니까? 요청의 헤더를 변경하거나 이와 유사한 것으로 대체 할 수 있습니까?

그런 식으로 쓰는 것이 안전한가요?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}

3
기존 답변에 추가하면 항상 서버에 요청한 IP 주소가 될 것이지만 이것이 요청을 시작한 컴퓨터의 IP 주소라는 의미는 아닙니다. 프록시 서버의 수는 귀하와 최종 사용자 사이에있을 수 있으며 귀하에게 가장 가까운 것은 귀하가 얻은 IP 주소입니다.
Dan Grossman 2011 년

예, 다른 속임수 나 속임수로 대체 될 수 없기 때문에 안전합니다. 그러나 $ grant_all_admin_rights 변수에 대한 추가 검사를 추가했는지 확인하십시오.
Yuda Prawira

$ _SERVER 변수는 스푸핑 될 수 있습니다. 예 : curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ( "REMOTE_ADDR : $ ip", "HTTP_X_FORWARDED_FOR : $ ip")); 따라서 전적으로 컨텍스트에 의존합니다. 공격자가 응답을 기대하면 $ ip로 돌아갑니다. 응답에 신경 쓰지 않으면 확실히 헤더를 스푸핑 할 수 있습니다. 헤더 확인 후 코드가 "open_the_door_to_badguys ();"라고 말한 경우 당신은 문제가있을 것입니다.
TMG

3
@TMG $_SERVER['REMOTE_ADDR']HTTP 요청 헤더를 설정 하여 변수를 스푸핑 할 수 없습니다 . PHP HTTP_$_SERVERsuperglobal 에서 키를 만들 때 모든 HTTP 요청 헤더에 자동으로 접두사를 붙입니다.
MrWhite

답변:


110

예, 안전합니다. TCP 연결의 소스 IP이며 HTTP 헤더를 변경하여 대체 할 수 없습니다.

걱정할 수있는 한 가지 경우는 역방향 프록시 뒤에있는 경우입니다.이 경우 REMOTE_ADDR은 항상 프록시 서버의 IP이고 사용자 IP는 HTTP 헤더 (예 : X-Forwarded-For)에 제공됩니다. ). 그러나 일반적인 사용 사례의 경우 REMOTE_ADDR을 읽는 것이 좋습니다.


4
IP 주소 스푸핑은 어떻습니까?
Abdull 2015 년

1
@Abdull 그렇게 할 수있는 사람은 일반적으로 상자에 물리적으로 접근 할 수있는 사람과 동일합니다. 그러니 그다지 걱정하지 마세요.
Behrooz

5
@Abdull IP 스푸핑은 한 방향으로 만 메시지를 보낼 수 있으며, IP를 스푸핑하여 그 대가로 메시지를받을 수 없습니다.

1
인터넷 라우터가 패킷을 라우팅하기 위해 소스 및 대상 IP를 확인하지 않습니까? 스푸핑 된 패킷이 인터넷 노드를 통해 목적지에 도달 할 수 있을지 의심됩니다.
Viktor Joras

57

$_SERVER['REMOTE_ADDR']TCP 연결이 들어온 IP 주소입니다. 인터넷에서 IP 주소를 양방향으로 스푸핑하는 것이 기술적으로 가능하지만 (BGP를 통해 파울 라우트를 발표함으로써) 이러한 공격은 발견 될 가능성이 높고 일반적인 공격자는 사용할 수 없습니다. 기본적으로 공격자는 ISP 또는 통신 업체를 제어해야합니다. TCP에 대한 가능한 단방향 스푸핑 공격은 없습니다 (아직). LAN에서는 양방향 IP 스푸핑이 사소합니다.

또한 IPv4가 아니라 IPv6 주소 일 수 있습니다. 현재 체크는 점에서 괜찮지 만, 당신이 체크 할 경우 1.2.3.4에만 발생 어디 에서 $_SERVER['REMOTE_ADDR'], 공격자는 단순히에서 연결할 수 있습니다 2001:1234:5678::1.2.3.4.

요약하자면, 중요한 (은행 / 군사 / 잠재적 피해> 50.000 €) 애플리케이션 이외의 경우 로컬 네트워크에서 공격자를 제외 할 수있는 경우 원격 IP 주소를 사용할 수 있습니다.


4
인터넷 프로토콜에 대해 잘 알고있는 것 같습니다.
Brian Peterson 2013

@phihag, $_SERVER['REMOTE_ADDR']TCP 연결이 들어온 IP 주소 인지 여부 는 전적으로 SAPI에 따라 다릅니다.
Pacerier 2015 년

WEP / WPA WLAN의 공격자가 실제 클라이언트를 쫓아 내고 해당 IP 주소를 스푸핑하는 것은 불가능한 일과는 거리가 멀습니다. WEP와 WPA 모두 you have been kicked off the wlan올바른 도구를 사용하여 스푸핑 패킷을 쉽게 만들 수 있는 약점을 가지고 있습니다. 구글 WPA downgrade test, 예를 들면
hanshenrik

IP 주소는 TCP 수준이 아닌 IP 수준입니다.
Viktor Joras

3

위에서 언급했듯이 절대적으로 안전하지 않습니다. 하지만 사용하지 말아야한다는 의미는 아닙니다. 이를 다른 인증 방법 (예 : COOKIE 값 확인)과 결합하는 것을 고려하십시오.


7
IP 주소를 스푸핑 한 후 http 요청을 변경하고 거짓 쿠키를 보내는 것은 케이크 조각입니다 ..... (또는 쿠키 조각)
Uri Goren

1
당신이 "절대적으로 안전하지"무슨 뜻인지 설명해주십시오
제이크
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.