복붙노트

$ _SERVER [ 'REMOTE_ADDR'] 변수를 위조하는 방법은 무엇입니까?

PHP

$ _SERVER [ 'REMOTE_ADDR'] 변수를 위조하는 방법은 무엇입니까?

$ _SERVER [ 'REMOTE_ADDR'] 변수의 내용을 가짜 또는 납치하는 것이 가능합니까?

요청을 가짜로 보내고 싶습니다.

$_SERVER['REMOTE_ADDR']='127.0.0.1';

PHP로 어떻게 할 수 있습니까? 어떻게 CURL이 그렇게 할 수 있습니까?

해결법

  1. ==============================

    1.나는 당신이 그것을 원격으로 속이는 것을 의미한다고 생각한다. 짧은 대답은 할 수 있습니다. 얼마나 쉬운 지에 대한 긴 대답은 당신이 그것을 어떻게 가짜로 만들고 싶은지에 달려 있습니다.

    나는 당신이 그것을 원격으로 속이는 것을 의미한다고 생각한다. 짧은 대답은 할 수 있습니다. 얼마나 쉬운 지에 대한 긴 대답은 당신이 그것을 어떻게 가짜로 만들고 싶은지에 달려 있습니다.

    응답 수신에 신경 쓰지 않는다면 목적지까지 원시 소켓을 열고 소스 IP 주소를 위조하는 것만 큼 사소한 일입니다. 모든 PHP 소켓 구현이 TCP 수준 이상이기 때문에 PHP로하기가 쉽지 않은지 잘 모르겠습니다. 그러나 그것이 가능하다고 확신합니다. 이제는 네트워크를 제어 할 수 없으므로 응답이 다시 전달되지 않습니다. 즉, (신뢰성있게 어쨌든) 사소한 위조 된 TCP 헤더를 통해 TCP 연결을 생성 할 수 없다는 것을 의미합니다 (syn-ack는 양방향 통신을 요구함으로써이를 방지합니다).

    그러나 IP가 차단 된 게이트웨이를 손상시킬 수 있다면 원하는대로 할 수 있습니다. 따라서 컴퓨터가 연결된 wifi 라우터를 손상 시키면 해당 컴퓨터로 가장 할 수 있으며 서버는 차이점을 알리지 않습니다. ISP의 아웃 바운드 라우터를 손상 시키면 (적어도 이론 상으로는) 컴퓨터 인 것처럼 가장 할 수 있고 서버가 그 차이를 알 수 없습니다.

    자세한 내용은 다음 링크를 참조하십시오.

    그러나 실제로 로컬 시스템 / 서버를 손상시키는 경우에만 TCP에서 127.0.0.1 루프백 주소를 위조 할 수 있습니다. 그리고 그 시점에서 정말로 중요합니까?

    프레임 워크를 사용하여이 정보에 액세스하는 경우 X-HTTP-FORWARDED-FOR 헤더를 확인하지 않아야합니다. 그렇지 않으면 IP 주소가 가짜입니다. 예를 들어 Zend Framework의 Zend_Controller_Request_Http :: getClientIp 메소드를 사용하는 경우 매개 변수로 false를 전달해야합니다. 그렇지 않으면 누군가가 HTTP 헤더를 보낼 필요가 있습니다 : X-Http-Forwarded-For : 127.0.0.1 이제 그들은 로컬 인 것 같습니다! 백엔드에서 작동하는 방식을 이해하지 못한 상태에서 프레임 워크를 사용하는 경우는 정말 좋지 않을 수 있습니다.

    최근 StackOverflow 응용 프로그램의 취약점을 발견 한 블로그 게시물을 작성했습니다. 그것은이 질문이 찾고있는 것과 매우 유사한 메커니즘을 이용하기 때문에 여기서는 매우 관련이 있습니다 (주위 환경은 다소 좁습니다) :

    StackOverflow 해킹 방법

  2. ==============================

    2.원격 주소는 예의 바르게 추가 된 것이 아니며 IP 프로토콜에서 패키지를 라우트하는 데 사용되므로 가짜 주소로 패키지를 보내면 응답을받지 못하고 HTTP 요청에 대해 이야기하고 있으므로, 이것은 TCP 연결을 통해 전달되며, 여러 개의 IP 패킷 (및 일치하는 응답)을 사용하여 설정합니다.

    원격 주소는 예의 바르게 추가 된 것이 아니며 IP 프로토콜에서 패키지를 라우트하는 데 사용되므로 가짜 주소로 패키지를 보내면 응답을받지 못하고 HTTP 요청에 대해 이야기하고 있으므로, 이것은 TCP 연결을 통해 전달되며, 여러 개의 IP 패킷 (및 일치하는 응답)을 사용하여 설정합니다.

    아니요, 불가능합니다 (물론 루프백 인터페이스를 통해 동일한 호스트에서 요청을 실제로 보내면 제외).

  3. ==============================

    3.Apache는 브라우저와 통신하는 데 사용하는 TCP 소켓에서 $ _SERVER [ 'REMOTE_ADDR']을 채 웁니다. 세 방향 핸드 쉐이크로 인해 열린 인터넷을 통해이 변수에 영향을 미치는 것은 불가능합니다. 클라이언트와 서버가 Wi-Fi와 같은 브로드 캐스트 네트워크에 있으면 와이어를 스니핑하고 핸드 셰이크를 완료 할 수 있습니다.

    Apache는 브라우저와 통신하는 데 사용하는 TCP 소켓에서 $ _SERVER [ 'REMOTE_ADDR']을 채 웁니다. 세 방향 핸드 쉐이크로 인해 열린 인터넷을 통해이 변수에 영향을 미치는 것은 불가능합니다. 클라이언트와 서버가 Wi-Fi와 같은 브로드 캐스트 네트워크에 있으면 와이어를 스니핑하고 핸드 셰이크를 완료 할 수 있습니다.

  4. ==============================

    4.서버에있는 $ _SERVER 배열의 항목을 모두 덮어 쓸 수 있습니다. 물론, 다른 사람의 것이 아닙니다.

    서버에있는 $ _SERVER 배열의 항목을 모두 덮어 쓸 수 있습니다. 물론, 다른 사람의 것이 아닙니다.

    그러나 컴퓨터의 IP 주소는 변경되지 않습니다.

  5. ==============================

    5.프록시를 통해 검색하는 경우 $ _SERVER [ 'REMOTE_ADDR']은 최종 사용자의 IP 주소가 아닌 프록시의 IP 주소로 설정 될 수 있습니다.

    프록시를 통해 검색하는 경우 $ _SERVER [ 'REMOTE_ADDR']은 최종 사용자의 IP 주소가 아닌 프록시의 IP 주소로 설정 될 수 있습니다.

    이 경우에 대신 사용할 수있는 다른 헤더가 있습니다.이 페이지는 모든 가능성을 검사하고 최종 사용자의 주소가 될 수있는 기능을 제공합니다.

    http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html

    그러나 사용자가 잘못 구성된 프록시 나 악의적 인 프록시를 사용하여 프록 싱하거나 최종 사용자의 익명을 확인하도록 설계된 경우 REMOTE_ADDR 이외의 헤더를 보장 할 수 없습니다 (단, 프록시로).

    최종 사용자가 HTTPS를 통해 탐색하는 경우 REMOTE_ADDR은 항상 그의 IP 주소가됩니다. HTTPS를 통한 프록시 전달을 사용할 수 없습니다. 따라서 자신의 주소를 절대적으로 확신 할 수있는 한 가지 방법은 HTTPS로 사이트를 열도록하는 것입니다.

  6. ==============================

    6.REMOTE_ADDR

    REMOTE_ADDR

    IP 주소를 변경하기 위해 프록시 등을 사용하여 스크립트를 요청할 수 있지만 원하는 텍스트를 설정할 수는 없습니다.

  7. ==============================

    7.그것은 아파치 또는 당신이 사용하는 서버에 의해 설정된 변수입니다. 당신은 그것을 속일 수 없다. $ _SERVER [ 'REMOTE_ADDR'] = '127.0.0.1';을 실행할 수 있습니다. 스크립트 초반에,하지만 당신이하려는 일이 뭔지는 의심 스럽네.

    그것은 아파치 또는 당신이 사용하는 서버에 의해 설정된 변수입니다. 당신은 그것을 속일 수 없다. $ _SERVER [ 'REMOTE_ADDR'] = '127.0.0.1';을 실행할 수 있습니다. 스크립트 초반에,하지만 당신이하려는 일이 뭔지는 의심 스럽네.

  8. from https://stackoverflow.com/questions/5092563/how-to-fake-serverremote-addr-variable by cc-by-sa and MIT license