2009-11-04 3 views
5

오늘 저는 PHP 기반 응용 프로그램의 꽤 이상한 동작을 보았습니다. 시스템의 특정 부분에는 AJAX 호출을 사용하는 UI가있어 상자의 내용을 백엔드에서 채 웁니다.php/ajax REMOTE_ADDR 가짜 네트워크 어댑터의 IP로 설정했습니다

이제 AJAX 수신기는 들어오는 모든 요청에 ​​대해 보안 검사를 수행하여 에만 유효한 클라이언트 IP 만 응답을 받도록합니다. 유효한 IP는 백엔드에도 저장됩니다.

는 클라이언트의 IP 내가 고객의 대부분을 밖으로 작동
$_SERVER['REMOTE_ADDR'] 

평범한 구식

를 사용 얻으려면. 오늘 remote_addr에 내 응용 프로그램의 실제 통신 주소 인 을 수행 한 네트워크 어댑터의 IP가 포함 된 설치가 실행되었습니다. 주위에 인터넷 검색을

나에게 Roshan's Blog entry on the topuic을 agve :

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

는 슬프게도 문제가 지속.

아무도 이런 종류의 문제에 빠져 들었습니까 (실제로 나는 완전히 새로운 문제를 발견했다고 생각하지 않습니다 ^^). 그리고이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

편집 : 통신이 완료

  • PHP 버전 5.2.9-1
  • 아파치/2.2.9 (Win32에서)에있어

    일반 LAN 카드를 통해 이제 액추컬 클라이언트에는 여러 개의 장치가 추가되었습니다. VMNet 어댑터 등.

    나는 클라이언트 구성을 많이 할 수있는 '방해'웹 서버 ...

    TIA가

    K

+1

여기서는 응용 프로그램을 실행하는 서버와 서버에 관한 세부 정보를 입력 할 수 있습니까? IP가 보유하고있는 IP를 의미합니다. –

+0

PLS 내 또한 – KB22

+0

그래서 예를 들어 시나리오는 클라이언트 측에 다음과 같을 수 참조 : eth0를 - 10.0.0.1 의 eth1 - 다음 서버에 u는 10.1.1.2을 가지고 요청이 10.1 대신 클라이언트를 통해 갈 때 10.1.1.1 .1.1 10.0.0.1을 나타냅니다? –

답변

4

불행하게도, 당신은 곡물 모든 IP 정보를 가지고 가야 궁금 해요 소금의.

IP 주소는 패킷 및 요청 정보를 고려하여 요청 중에 수집됩니다. 슬프게도,이 정보는 쉽게 스푸핑되거나 부정확 할 수 있으며 (많은 수의 네트워크 확률에 기반 함) 허영심 이상의 목적으로 사용되어서는 안됩니다.

+0

Thx에 대한 것이지만 권장 할 수있는 모범 사례가 있습니까? – KB22

+1

귀하의 질문에있는 코드는 "최선의 선택"이라고 생각합니다. 대부분의 경우 올바른 IP를 찾습니다. 결과를 반드시 신뢰할 필요는 없다는 것을 이해하십시오. –

+1

내가 받아 들였지만, REMOTE_ADDR 등이 실제로 아파치에 의해 어떻게 설정되는지에 대한 독서를 권할 수 있습니까? 나는 무엇이 나를 괴롭히는 지 이해하고 싶다. TIA – KB22

관련 문제