에러 백과

의심스러운 URL 출처 변경

서버 사이드 렌더링(SSR) 환경에서 URL을 해석한 결과 예상치 못한 출처 변경이 발생하면 이 오류가 발생합니다. 이 검사는 서버 측 요청 위조(SSRF)와 보안 우회로부터 애플리케이션을 보호하기 위한 @angular/platform-server의 보안 기능입니다.

설명

SSR 중 HTTP 요청을 수행하고 라우팅 규칙 상태를 처리하려면 Angular가 상대 URL을 절대 URL로 해석해야 합니다.

이 과정에서 Angular는 해석된 URL이 예상치 못하게 외부 또는 신뢰하지 않는 출처를 가리키지 않는지 검증합니다. 상대 경로처럼 동작하는 URL이 다른 출처로 해석되면 Angular는 NG05703을 발생시키고 요청이나 내비게이션을 차단합니다.

일반적인 원인

  • 역슬래시 접두사를 사용한 탈취 시도(오픈 리디렉션/SSRF 우회): 슬래시와 역슬래시로 시작하는 상대 경로(예: /\\attacker.com/path 또는 \\\\attacker.com/path)는 브라우저와 서버 측 URL 파서가 다르게 해석할 수 있습니다. 일부 파서는 이를 attacker.com을 가리키는 절대 URL로 해석합니다. Angular는 이 불일치를 감지하여 해석을 차단합니다.
  • 다른 출처로의 허용되지 않은 상태 변경: URL 변경을 현재 출처로 제한한 환경에서 location.replaceState나 location.pushState 등을 통한 내비게이션 또는 URL 갱신이 애플리케이션의 출처를 변경하는 경우입니다.
  • SSR 부트스트랩 URL 불일치: 서버 사이드 렌더링에서 렌더러에 전달한 url이 애플리케이션에 설정한 기본 출처(예: APP_BASE_HREF)와 맞지 않으면 라우터가 시작 시 위치를 동기화하려다 허용되지 않은 출처 변경을 일으킬 수 있습니다.
  • 난독화된 프로토콜 스킴: 출처 검사를 우회하려는 난독화되거나 잘못된 프로토콜의 절대 URL(예: ht\ntp://evil.com/path)입니다.

오류 디버깅하기

오류를 발생시킨 URL을 확인하세요. 파싱 이상을 일으킬 수 있는 예상치 못한 역슬래시, 줄바꿈, 기타 문자가 없는지 확인하세요.

  • 상대 URL이나 라우팅 경로에 역슬래시(\)를 사용하지 마세요.
  • 사용자가 제공한 URL이나 쿼리 매개변수는 SSR에서 처리하기 전에 올바르게 검증하고 정제(sanitize)하세요.
  • SSR 부트스트랩 URL과 설정한 기본 URL 맞추기: SSR 환경의 시작 단계에서 오류가 발생한다면 렌더러에 전달한 url이 예상 기본 출처/호스트(예: APP_BASE_HREF)와 일치하는지 확인하세요. 신뢰하는 애플리케이션 출처와 일치하지 않는다면 X-Forwarded-Host 같은 원시 요청 헤더에서 동적으로 얻은 URL을 사용하지 마세요.
  • 프로토콜 상대 URL(//other-domain.com/path)로 다른 도메인에 의도적으로 요청하려면 설정에서 허용하는지 확인하거나 명시적인 스킴(http:// 또는 https://)을 사용하세요.