X-Forwarded-For: <client>, <proxy1>, <proxy2>
- 프록시 서버를 통해 웹 서버에 연결하는 클라이언트의 원래 IP 주소를 식별하기 위한 사실상의 표준 헤더
- 클라이언트 연결이 정방향 또는 역방향 프록시를 통과하면 서버는 최종 프록시의 IP 주소만 볼 수 있다. 따라서 이 경우에 클라이언트 IP 주소를 제공하기 위해 X-Forwarded-For요청 헤더가 사용된다.
- X-Forwarded-For 헤더는 신뢰할 수 있는 역방향 프록시(예: 로드 밸런서)가 클라이언트와 서버 사이에 없는 경우 신뢰할 수 없다.
--> 조작될 수 있기에 완전한 신뢰를 해서는 안된다.
- 여러개의 XFF 헤더가 존재할 수 있음. 이를 단일 List로 처리해야함.
- XFF헤더를 쉼표를 사용하여 하나로 묶은 뒤 List화.
- XFF헤더를 List화 한뒤 List를 쉼표로 하나로 묶음.
- 주소 선택시 전체 IP List를 사용해야함.
- 가장 오른쪽(마지막) : 신뢰할 수 없으며 보안 관련 목적이 아닌경우 사용.
- 가장 왼쪽(처음) : 유효한 주소이면서 비공개/내부 IP가 아닌 IP를 사용.
- 신뢰할 수 있는 클라이언트 IP 선택을 위해서는 XFF의 추가 구성이 필요
- 신뢰 할수 있는 프록시 수 : 인터넷과 서버 사이 역방향 프록시 수가 구성 되어야 함. XFF IP List는 해당 수에서 1을 뺀 가장 오른쪽에서 검색.
- 신뢰할 수 있는 프록시 List : 신뢰할 수 있는 역방향 프록시의 IP나 IP 범위를 설정. XFF IP List는 오른쪽부터 검색하며 신뢰할 수 있는 프록시 목록에 존재하지 않는경우 이를 제외하고 List를 작성.
- 신뢰할 수 있는 첫 번째 X-Forwarded-For IP 주소는 실제 클라이언트 컴퓨터가 아닌 신뢰할 수 없는 중간 프록시에 속할 수 있지만, 보안 목적으로 적합한 유일한 IP이다.
- 신뢰할 수 있는 역방향 프록시 뒤에 있을지라도 서버가 인터넷에서 직접 연결될 수 있는 경우 X-Forwarded-For IP 목록의 어느 부분도 신뢰할 수 없거나 보안 관련 용도로 안전하지 않다는 점에 유의해야 한다.