실습 전용 — 이 앱은 보안 통제를 의도적으로 비활성화합니다. 일회용 구독에서만 구동하고 실습 후 삭제하세요.
ADFS SAML Lab판별 중…Host 192.168.4.110:3000PUBLIC_BASE_URL https://adfs-lab.prism-proxy.localtest.me:8443base 소스 요청 유도X-Forwarded-* 있음피어 192.168.4.100경고 1요청 인스펙터 →

요청 인스펙터

앱이 실제로 받은 것을 그대로 보여줍니다. 우리가 소켓에서 직접 관측한 값은 별도 섹션으로 분리했습니다 — 받은 헤더와 섞으면 측정이 무의미해집니다.

접속 경로 판정

결론보다 근거가 중요합니다. 판정에 쓰인 값을 함께 보여줍니다.

판정 (서버만으로)
unknown
판정 (브라우저 대조)
판별 중…
근거
서버는 요청 헤더만으로 경유 여부를 알 수 없습니다 — 프록시가 X-Forwarded-* 를 보내지 않기 때문입니다(B-1). 브라우저 자신의 origin 과 대조해야만 판별됩니다.
base URL (사용중)
https://aws-insider-e1e444fd-dfae-480a-b782-5eaa35682f5e.feelanet.ai
└ 요청에서 유도하면
https://aws-insider-e1e444fd-dfae-480a-b782-5eaa35682f5e.feelanet.ai
└ PUBLIC_BASE_URL
https://adfs-lab.prism-proxy.localtest.me:8443
HTTP 버전
1.1
  • ⚠ 고정값(https://adfs-lab.prism-proxy.localtest.me:8443)과 요청 유도값(https://aws-insider-e1e444fd-dfae-480a-b782-5eaa35682f5e.feelanet.ai)이 다릅니다 — 프록시를 경유 중이라는 신호입니다.

클라이언트 IP 후보

프록시 경유 시 진짜 클라이언트 IP는 어디에도 없습니다. 비대칭에 주의 — ADFS는 브라우저가 직접 접속하므로 진짜 IP를 봅니다.

출처값신뢰설명
socket.remoteAddress (우리가 직접 관측)192.168.4.100신뢰앱이 보는 실제 피어. 프록시 경유 시 이 값은 온프렘 HCA 프로세스의 주소이며 **모든 외부 사용자가 같은 값**으로 보입니다. (B-5)
X-Forwarded-For (와이어)216.73.216.55위조 가능prism-proxy 는 이 헤더를 주입하지 않습니다. 값이 보인다면 클라이언트가 스스로 붙인 것이므로 신뢰하면 안 됩니다 (IP 위조 경로).
X-Forwarded-For (Next 합성)216.73.216.55위조 가능⚠ Next.js 가 소켓 정보로 스스로 만들어 넣은 값입니다. 프록시가 보낸 것이 아닙니다 — 이걸 증거로 쓰면 결론이 정반대가 됩니다.
X-Real-IP (와이어)216.73.216.55위조 가능동일하게 주입되지 않습니다.
x-ms-forwarded-client-ip—없음WAP/MS-ADFSPIP 프록시가 붙이는 헤더. 이 경로에는 WAP 이 없으므로 항상 비어 있습니다. ADFS 의 Extranet Smart Lockout 이 이 값을 씁니다.

헤더 diff — 프록시 경유 vs 루프백 직접

같은 앱을 127.0.0.1로 직접 불러 헤더 집합을 비교했습니다. 프록시가 더하고 빼는 것이 그대로 드러납니다.

이 요청에만 있음 4

x-forwarded-scheme
x-real-ip
x-request-id
x-scheme

루프백에만 있음 4

accept-language
cache-control
pragma
sec-fetch-mode

받은 헤더 (13개 · 501 바이트)

프록시/클라이언트가 실제로 보낸 것만. 우리 주입분은 제외했습니다.

    accept: */*
    accept-encoding: gzip, br, zstd, deflate
    connection: keep-alive
    host: 192.168.4.110:3000
    user-agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
    x-forwarded-for: 216.73.216.55
    x-forwarded-host: aws-insider-e1e444fd-dfae-480a-b782-5eaa35682f5e.feelanet.ai
    x-forwarded-port: 443
    x-forwarded-proto: https
    x-forwarded-scheme: https
    x-real-ip: 216.73.216.55
    x-request-id: fabba3d47a30a6e2ec7afbef08abdcc2
    x-scheme: https

우리가 직접 관측한 값

server.mjs 가 소켓에서 읽어 넘긴 값입니다. 받은 헤더가 아닙니다 — 혼동하면 측정이 망가집니다.

wire-x-forwarded-host: aws-insider-e1e444fd-dfae-480a-b782-5eaa35682f5e.feelanet.ai
wire-x-forwarded-proto: https
wire-x-forwarded-for: 216.73.216.55
wire-x-forwarded-port: 443
wire-x-real-ip: 216.73.216.55
wire-forward-headers: x-forwarded-host,x-forwarded-proto,x-forwarded-for,x-forwarded-port,x-real-ip
remote-address: 192.168.4.100
remote-port: 63869
local-port: 3000
encrypted: 0
http-version: 1.1
wire-host: 192.168.4.110:3000

쿠키 (0개 · 0 바이트)

prism_proxy_session 은 보이지 않습니다 (정상: 프록시가 제거함).

(없음)

재현용 curl

이 요청을 그대로 다시 쏘려면.

curl -i -X GET "/lab/echo" \
  -H "accept: */*" \
  -H "accept-encoding: gzip, br, zstd, deflate" \
  -H "user-agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" \
  -H "x-forwarded-for: 216.73.216.55" \
  -H "x-forwarded-host: aws-insider-e1e444fd-dfae-480a-b782-5eaa35682f5e.feelanet.ai" \
  -H "x-forwarded-port: 443" \
  -H "x-forwarded-proto: https" \
  -H "x-forwarded-scheme: https" \
  -H "x-real-ip: 216.73.216.55" \
  -H "x-request-id: fabba3d47a30a6e2ec7afbef08abdcc2" \
  -H "x-scheme: https"