PHP

 

프록시의 익명성을 이용하면 인터넷에서 악의적인 리플이나 불법적인 행동을 하는 이를 원천 봉쇄가 어려울 수 있습니다. 사용자PC에서 프록시 서버를 경유해 특정 웹사이트로 접근하면 프록시 서버에 의해 사용자의 리얼ip를 숨길 수 있기 때문입니다.

그런데, 웹사이트에 접근할 때, 여러 가지 헤더정보를 넘겨 주게 되는데, 거기에 원 사용자 ip도 같이 넘겨 받게 됩니다. 그 메소드가 "X-Forwarded-For"이고, php에서는 "HTTP_X_FORWARDED_FOR" 변수에 담겨 지게 됩니다.

그러므로 HTTP_X_FORWARDED_FOR 변수로 비교 체크하여 불량 ip를 어느 정도 봉쇄할 수도 있지 않을까 싶습니다.

 

<?php  
 function getRealIpAddr(){  
    if(!empty($_SERVER['HTTP_CLIENT_IP']) && getenv('HTTP_CLIENT_IP')){  
        return $_SERVER['HTTP_CLIENT_IP'];  
    } 
    elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && getenv('HTTP_X_FORWARDED_FOR')){  
        return $_SERVER['HTTP_X_FORWARDED_FOR'];  
    } 
    elseif(!empty($_SERVER['REMOTE_HOST']) && getenv('REMOTE_HOST')){  
        return $_SERVER['REMOTE_HOST'];  
    } 
    elseif(!empty($_SERVER['REMOTE_ADDR']) && getenv('REMOTE_ADDR')){  
        return $_SERVER['REMOTE_ADDR'];  
    }  
    return false;  
 } 


 if($ip = getRealIpAddr()){ 
     echo $ip; 
 } 
 ?>

 

출처 :

HabonyphP 블로그

http://blog.habonyphp.com/entry/php-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%8B%A4%EC%A0%9C-ip-%EC%96%BB%EB%8A%94-%ED%95%A8%EC%88%98#.Wbj87rKrRpg

 

 

 

 

 프록시 - Proxy 는 크래커를 지켜주지 못한다.  =============================================================
제목 : Proxy 는 크래커를 지켜주지 못한다.
글쓴이 : beist (http://beist.org)
=============================================================

인터넷 상에서 데이터를 전송할 때 꼭 필요한 것 중에 하나가 IP Address 이다.
네트워크 상에서 IP 는 자신의 고유 주소로써 데이터를 송/수신할 때 꼭 필요한
것 중에 하나이다.

본래 Proxy 는 네트워크의 중간에 설치함으로써 Cache 등의 기능을 활용하여 
네트워크 트래픽을 줄이거나 자원의 절약을 위해서 사용되었으나 근래에 들어서 
그 용도가 많이 변질되었다.

Proxy 라 함은 주로 Web Proxy 를 많이 뜻하는데, Web Proxy 를 이용하여 인터넷을
사용할 경우 자신의 IP 를 노출시키지 않고 Proxy Server 의 IP 를 이용한다는
점에서, 사용자의 프라이버시를 지킬 수 있다는 것에 많은 사람들이 애용하고 있다.

그러나 특정 부류의 경우 Proxy 를 이용하여 악성 리플을 남기거나, 불법적인
행위를 하는 경우가 있는데, Proxy 의 익명성을 이용하여 이러한 행동을 한다면
이는 잘못된 생각이다. Proxy 는 사용자를 지켜주기 위해 개발된 것이 아니다.

이 글은 Proxy 의 익명성을 이용하여 인터넷에서 악의적인 행동을 하는
사람들을 대상으로 쓸 것이다.

Proxy 서비스를 제공해주는 A 라는 Proxy 서버가 있다고 가정하자. B 라는 사용자는
A Proxy 서버를 이용하여 C 사이트에 연결할 것이다. B 는 인터넷 익스플로어의
Proxy 관련 설정으로 A Proxy 를 지정하였다. 이럴 경우 B 사용자는 C 사이트에 연결
할 때 다음과 같은 경로를 거치게 된다. (중간의 Network 경로는 생략하였다.)

B (사용자) -> A (Proxy Server) -> C (웹 사이트)

보기에, B 사용자는 A Proxy 서버를 거쳐서 C 에 가기 때문에, C 사이트는 B 사용자의
주소를 모를 것처럼 보인다. 이 것이 Proxy 서버가 사용자의 익명성을 지켜준다고
생각한다. 하지만 실제로는 그렇지 않다.

Proxy 서버가 C 사이트에 Web Contents 를 요청할 때, 여러 가지 헤더를 넘기게
되는데, 이 때 Proxy 를 이용하는 원래 사용자의 IP 도 같이 넘겨주기 때문이다. 
여기서 A Proxy 서버는 C 사이트에 Web 요청을 보낼 때, B 사용자의 IP 정보도
같이 넘겨주게 되는데, 그 메소드는 "X-Forwarded-For" 이다.

Apache 웹 서버를 대상으로 설명하자면, Apache 웹 서버는 Request 의 헤더 중에
X-Forwarded-For 라는 것이 있다면 이 것을 환경 변수에 저장한다. 즉, C 사이트는
A Proxy 서버를 이용하는 B 사용자의 IP 주소도 알 수 있다는 이야기가 된다.

여기서는 웹 사이트에 접속한 사용자가 Proxy 서버를 이용하여 들어왔는지 알아
내는 방법을 PHP 를 대상으로 설명해보겠다. PHP 에서는 Apache 웹 서버에서 저장한
환경 변수를 상속받아 PHP 의 환경 변수로 다시 저장하는데, Proxy 가 보내온
헤더의 정보 중 "X-Forwarded-For" 는, PHP 에서 $HTTP_X_FORWARDED_FOR 변수에
담기게 된다.

아래는 웹 사이트에 접속한 사용자가 Proxy 를 이용하는지 판별해주는 테스트
소스이다.


---------- proxy-check.php ----------

<html>
<head><title>Proxy Check</title></head>
<body>
<br>
<font size=2>

<?

// 만약 HTTP_X_FORWARDED_FOR 환경 변수가 존재한다면 Proxy 서버를 이용하여
// 접근하는 것이다.


$REMOTE_ADDR=$_SERVER['REMOTE_ADDR'];
$HTTP_X_FORWARDED_FOR=$_SERVER["HTTP_X_FORWARDED_FOR"]; 
if($HTTP_X_FORWARDED_FOR)
{
    echo "당신은 Proxy 서버를 이용하고 있군요.<br><br>";
    echo "<font color=blue>Proxy IP</font> : $REMOTE_ADDR<br>";
    echo "<font color=red>Your IP</font> : $HTTP_X_FORWARDED_FOR<br>";
    
    header("Location: http://macaronics.net/erro.php", true, 1);
    exit();
}
else
{
 // echo "당신은 Proxy 서버를 이용하지 않고 있습니다.<br><br>";
  //echo "<font color=red>Your IP</font> : $REMOTE_ADDR";
  
}




?>



</body>
</html>

---------- proxy-check.php ----------


위 소스를 테스트해보면 알 수 있지만, Proxy 서버를 이용하여 접근할 경우 원래
사용자의 IP 를 볼 수 있다.

이 글로 우리는 Proxy 서버를 사용하는 것이 사용자의 IP 를 숨겨주는 것이
아니라는 것을 알 수 있다. Proxy 를 이용하여 악의적인 행위를 해서는 안 될
것이다. 자신의 IP 가 노출되기 때문에 해서는 안된다는 것이 아니라, 악의적인
행위는 근절되야한다!!


만약 서버 관리자의 입장으로써, Proxy 서버를 이용하는 사람들을 막고 싶다면
HTTP_X_FORWARDED_FOR 환경 변수를 체크함으로 이용할 수 있을 것이다. 그러나
여기서 한가지 주의해야 할 점은, 회사나 학교 등에서는 내부 IP 를 사용하는
경우가 가끔 존재하는데, 이럴 경우 외부로 나가는 패킷은 집단 내에 존재하는
Proxy 서버를 통해서 나가게 되는 경우가 있다.

이럴 경우에, HTTP_X_FORWARDED_FOR 환경 변수가 존재한다고 무조건 사용자의
접근을 차단하는 방법을 이용해서는 안되고, Original IP 가 가상 IP 에서만
존재할 수 있는 것인지 확인을 한 후 처리를 해야할 것이다. 예를 들어 Original
IP 가 "192.168.0.100" 이라면 가상 IP 이다. 

그러나 이 것도 100% 신뢰할 수는 없는데 그 이유에 대해서는 내가 쓴 "CGI 
에서 Proxy 환경 변수를 이용할 경우 문제가 되는 점" 에서 참고하도록 하자.
 

 

 

출처 : http://hackersnews.org/hn/read.cgi?board=hn_sangsik&nnew=2&y_number=83

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

Better leave it unsaid. (말하지 않는 것이 차라리 낫다.)

댓글 ( 0)

댓글 남기기

작성
  •    

  •