$ _SERVER [ 'REMOTE_ADDR'] 변수를 가짜로 만드는 방법은 무엇입니까?
$_SERVER['REMOTE_ADDR']
변수 내용을 위조하거나 도용 할 수 있습니까?
다음과 같이 가짜 요청을하고 싶습니다.
$_SERVER['REMOTE_ADDR']='127.0.0.1';
PHP로 어떻게 할 수 있습니까? CURL이 어떻게 든 할 수 있습니까?
나는 당신이 그것을 원격으로 속이는 것을 의미한다고 가정합니다. 짧은 대답은 가능합니다. 얼마나 쉬운 지에 대한 긴 대답은 당신이 그것을 어떻게 속이고 싶은지에 달려 있습니다.
응답 수신에 신경 쓰지 않는다면 원시 소켓을 대상으로 열고 소스 IP 주소를 위조하는 것만 큼 간단합니다. PHP의 모든 소켓 구현이 TCP 수준 이상이기 때문에 PHP에서 정말 쉬운 지 잘 모르겠습니다. 그러나 나는 그것이 가능하다고 확신합니다. 이제 네트워크를 제어 할 수 없기 때문에 응답이 다시 돌아 오지 않습니다. 즉, 사소한 위조 된 TCP 헤더를 통해 TCP 연결을 생성 할 수 없습니다 (신뢰할 수 있음) (SYN-ACK이 양방향 통신을 요구하여이를 방지하기 때문).
그러나 IP가 꺼져있는 게이트웨이를 손상시킬 수 있다면 원하는대로 할 수 있습니다. 따라서 컴퓨터가 연결된 Wi-Fi 라우터를 손상시키는 경우 해당 컴퓨터로 가장 할 수 있으며 서버는 차이를 알 수 없습니다. ISP의 아웃 바운드 라우터를 손상시키는 경우 (적어도 이론적으로는) 컴퓨터 인 척 할 수 있으며 서버는 차이를 알 수 없습니다.
자세한 내용은 다음 링크를 참조하세요.
그러나 127.0.0.1
실제로 로컬 컴퓨터 / 서버를 손상시킨 경우에만 TCP 에서 루프백 주소 를 위조 할 수 있습니다 . 그리고 그 시점에서 그것이 정말로 중요합니까?
중대한
이 정보에 액세스 할 수있는 프레임 워크를 사용하는 경우가 될 확신 가 확인하지 않는 X-HTTP-FORWARDED-FOR
헤더를! 그렇지 않으면 IP 주소를 위조하는 것은 사소한 일입니다. 예를 들어 Zend Framework의Zend_Controller_Request_Http::getClientIp
메서드를 사용 false
하는 경우 매개 변수로 전달해야합니다 ! 그렇지 않으면 누군가 HTTP 헤더를 보내면 X-Http-Forwarded-For: 127.0.0.1
됩니다. 이제 그들은 로컬 인 것처럼 보입니다! 이것은 백엔드에서 작동하는 방식을 이해하지 않고 프레임 워크를 사용하는 것이 실제로 나쁠 수있는 경우입니다.
편집 : 관련
최근에 StackOverflow의 애플리케이션에서 취약점을 발견 한 방법에 대한 블로그 게시물을 작성했습니다. 이 질문이 찾고있는 것과 매우 유사한 메커니즘을 이용하기 때문에 여기에서 매우 관련이 있습니다 (주변 상황은 다소 좁지 만).
원격 주소는 예의없이 추가 된 것이 아니며 IP 프로토콜에서 패키지를 라우팅하는 데 사용되므로 가짜 주소로 패키지 를 보내면 응답을받을 수 없으며 HTTP 요청에 대해 이야기하고 있으므로 TCP 연결을 통해 전달되며, 설정을 위해 여러 IP 패킷 (및 일치하는 응답)이 필요합니다.
아니요, 불가능합니다 (물론 루프백 인터페이스를 통해 동일한 호스트에서 실제로 요청을 보내는 경우는 제외).
Apache $_SERVER['REMOTE_ADDR']
는 브라우저와 통신하는 데 사용하는 TCP 소켓에서 채 웁니다 . 3 방향 핸드 셰이크 때문에 개방형 인터넷에서이 변수에 영향을주는 것은 불가능 합니다 . 클라이언트와 서버가 Wi-Fi와 같은 브로드 캐스트 네트워크에있는 경우 와이어를 스니핑하고 핸드 셰이크를 완료 할 수 있습니다.
프록시를 통해 검색하는 경우 $_SERVER['REMOTE_ADDR']
최종 사용자가 아닌 프록시의 IP 주소로 설정 될 수 있습니다.
이 경우 대신 사용할 수있는 다른 헤더가 있습니다.이 페이지는 모든 가능성을 확인하고 최종 사용자의 주소 일 가능성이 가장 높은 주소를 제공하는 기능을 제공합니다.
http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html
그러나 사용자가 최종 사용자를 anonymise하도록 설계된 심하게 구성 프록시 또는 악의적 하나, 또는 하나를 사용하여 프록시 경우에, 당신은 이외의 헤더 중 하나를 보장 할 수 없습니다 REMOTE_ADDR
만 멀리로 당신을 이끌 것이다 ( 프록시).
최종 사용자가 HTTPS를 통해 브라우징하는 경우 REMOTE_ADDR
항상 IP 주소가됩니다. HTTPS를 통해 프록시 전달을 사용할 수 없습니다. 따라서 그의 주소를 절대적으로 확인하는 한 가지 방법은 HTTPS에서 사이트를 열도록하는 것입니다.
당신은에서 항목을 덮어 쓸 수 있습니다 $_SERVER
당신이 언급 한 포함, 배열 하여 서버; 물론 다른 사람의 것이 아닙니다.
그러나 컴퓨터의 IP 주소는 변경되지 않습니다.
REMOTE_ADDR
사용자가 현재 페이지를보고있는 IP 주소입니다.
프록시 등을 사용하여 스크립트를 요청하여 IP 주소를 변경할 수 있지만 원하는 텍스트를 설정할 수 없습니다.
아파치 또는 사용중인 서버에 의해 설정된 변수입니다. 스푸핑 할 수 없습니다. $_SERVER['REMOTE_ADDR']='127.0.0.1';
스크립트 시작 부분에서 실행할 수 있지만 그게 당신이하려는 일인지 의심 스럽습니다.
참고 URL : https://stackoverflow.com/questions/5092563/how-to-fake-serverremote-addr-variable
'IT Share you' 카테고리의 다른 글
PhpStorm / Webstorm에서 JavaScript로 가져 오기가 작동하지 않음 (0) | 2020.11.16 |
---|---|
Android 셸에서 파일을 복사하고 편집하는 방법은 무엇입니까? (0) | 2020.11.16 |
SQL Server Express Edition에서 작업을 만드는 방법 (0) | 2020.11.16 |
NullPointerException을 던지는 Android FragmentManager BackStackRecord.run (0) | 2020.11.16 |
C #에는 Java와 같은 String Tokenizer가 있습니까? (0) | 2020.11.16 |