프록시는 한 시스템에서 다른 시스템으로 요청을 전달한다는 전제 하에 작동합니다. 이러한 기능은 일반적으로 로드 밸런싱(확장성), 데이터 유출 방지(보안), 압축(성능)과 같이 중간에 위치하지 않고도 어느 정도 가치를 더해줍니다.
문제는 클라이언트가 보낸 요청이 수정되지 않고 대상지로 전달된다는 것입니다.
여기서 상황이 위험해질 수 있습니다. 오늘날 프록시를 통해 제공되는 모든 앱의 절반 이상이 X-Forwarded-For를 활용하는 것을 볼 수 있습니다. 실제 라이브 앱의 56%가 이를 사용하고 있으며, 이는 꽤 중요한 데이터입니다. X-Forwarded-For는 클라이언트의 원래 IP 주소를 전달하는 사용자 지정 HTTP 헤더로, 다른 쪽 앱이 해당 IP 주소를 알 수 있도록 해줍니다. 그렇지 않으면 프록시 IP 주소만 보게 되어 일부 앱이 화를 낼 수 있습니다.
많은 애플리케이션이 사기를 방지하고 액세스를 가능하게 하기 위해 클라이언트의 실제 IP 주소를 알아야 하기 때문입니다. 최근에 평소에 사용하는 기기가 아닌 다른 기기에서 은행이나 Gmail, Xbox 계정( 마인크래프트가 있는 곳이잖아요, 알겠죠?)에 로그인했다면 보안 경고를 받았을 수 있습니다. 로그인 위치에 대한 정보도 추적되어 사기 및 오용 시도를 감지하는 데 목적이 있습니다.
귀하의 실제 IP 주소는 일부 시스템에서 접근을 허용하거나 거부하는 데 사용되며 귀하의 물리적 위치를 추론하는 수단으로도 사용됩니다. 그래서 이메일 경고에는 종종 "불가리아에서 로그인했나요?"라는 문구가 포함됩니다.
일부 시스템에서는 X-Forwarded-For를 사용하여 액세스 제어를 시행하기도 합니다. 예를 들어 WordPress는 .htaccess 파일을 사용하여 IP 주소를 기준으로 액세스를 허용 목록에 추가합니다. 아니요, 이것이 가장 좋은 해결책은 아니지만 흔히 쓰이는 방법이며, 최소한 앱을 오용으로부터 보호하려는 노력에 대해서는 칭찬을 해야 합니다.
좋은 생각인지 아닌지와 관계없이 인증이나 권한 부여 체계의 일부로 X-Forwarded-For를 사용하려는 경우 실제로 클라이언트 IP 주소인지 확인하기 위해 최선 을 다하는 것이 좋습니다. 이는 전반적인 보안 방정식에서 흔히 사용되는 요소 중 하나로, 기업의 이익뿐 아니라 소비자의 이익도 보호합니다.
하지만 클라이언트가 헤더에 보낸 모든 내용을 맹목적으로 수락한다면 누군가가 값을 위조하여 불법적인 접근을 방지하기 위한 보안 메커니즘을 우회할 수 있게 됩니다. 결국 몇 줄의 코드를 작성하거나 HTTP 헤더를 손쉽게 조작할 수 있는 많은 Chrome 플러그인 중 하나를 가져오면 원하는 것은 무엇이든 스푸핑할 수 있습니다.
실제 IP 주소를 얻고 있는지 확인하는 방법 중 하나는 사용자 입력을 신뢰하지 않는 것입니다. 네, 보안 규칙 제로가 또 나왔네요. 사용자 입력을 절대 믿지 마세요. 그리고 우리는 HTTP 헤더가 사용자 입력이라는 걸 알고 있습니다. 그것이 사용자 입력인 것처럼 보이든 그렇지 않든 말입니다.
이미 프록시가 있다면 좋습니다. 그렇지 않다면 하나 구입하세요. 그렇게 하면 X-Forwarded-For에서 올바른 값을 추출하여 넣고 스푸퍼의 움직임을 막을 수 있기 때문입니다.
기본적으로 프록시는 요청에 접근하여 IP 패킷에 숨겨진 실제 IP 주소를 찾을 수 있어야 합니다. 일부 프록시는 구성이나 정책을 통해 이를 수행할 수 있고, 다른 프록시는 프로그래밍적인 마법이 필요합니다. 하지만 어떻게 됐든 그 값을 X-Forwarded-For HTTP 헤더에 넣고 평소처럼 진행하면 됩니다. 그렇게 하면 앱이나 다운스트림 서비스에서 액세스 및 권한 부여와 관련된 결정을 포함하여 결정을 내리는 데 필요한 정확한 정보를 확보할 수 있습니다.
대부분의 아키텍처와 상황에서 이를 통해 스푸핑된 X-Forwarded-For를 사용하여 무단으로 액세스할 가능성이 줄어듭니다. 항상 그렇듯이 클라이언트와 그 적법성에 대한 정확한 이해를 형성하는 데 필요한 정보가 많을수록 보안이 더욱 강화됩니다. IP 주소(X-Forwarded-For에 있음)를 장치 유형, 사용자 에이전트 및 HTTP와 네트워크 프로토콜을 통해 자동으로 전달되는 기타 세부 정보와 결합하면 정보에 입각한 결정을 내릴 수 있는 보다 강력한 컨텍스트가 제공됩니다.
안전히 계세요!
X-Forwarded-For 처리를 위한 리소스: