비공개 네트워크 액세스란 무엇인가요?
비공개 네트워크 액세스(PNA, 이전 명칭: CORS-RFC1918, 줄여서 로컬 네트워크 액세스)는 웹사이트가 비공개 네트워크의 서버에 요청을 전송하는 기능을 제한하는 보안 기능입니다. 이를 통해 CSRF (Cross-Site Request Forgery)와 같은 잠재적인 공격으로부터 사용자와 내부 네트워크를 보호할 수 있습니다. Chrome은 PNA를 점진적으로 구현하고 있으며 향후 출시에서 보호 기능이 확대될 예정입니다.
주요 PNA 보호 (현재 상태 포함)
- 안전한 컨텍스트: 안전한 컨텍스트만 비공개 네트워크 하위 리소스 요청을 할 수 있습니다(Chrome 94부터 시행됨). 자세한 내용은 비공개 네트워크 액세스 업데이트 게시물을 참조하세요.
- 프리플라이트 요청: Chrome은 비공개 네트워크 하위 리소스 요청 전에 프리플라이트 요청을 전송하여 서버 권한을 확인합니다 (Chrome 104 이후부터 실패 시 DevTools에서 경고, Chrome 130에서 시행 예정). 이 내용은 비공개 네트워크 액세스: 프리플라이트 소개에서 설명했습니다. Chrome 123부터 PNA로 인해 프리플라이트가 생성되고 전송된 경우에만
Accept
와 같은 일부 CORS 헤더가 생략됩니다. - 동일 출처 예외: Chrome 115부터 잠재적으로 신뢰할 수 있는 출처의 동일 출처 요청은 PNA 제한에서 제외됩니다.
확장된 보호 조치: 웹 작업자
PNA 보호가 웹 작업자 (전용 작업자, 공유 작업자, 서비스 작업자)까지 확장됩니다. 여기에는 다음이 포함됩니다.
- 작업자 스크립트 가져오기: 비공개 IP 주소에 대한 보안 컨텍스트와 프리플라이트가 필요합니다. Chrome 110 이후의 경고가 Chrome 130에서 시행됩니다.
- 워커 스크립트에서 시작된 가져오기: 워커 스크립트 내에서 이루어지는 모든 가져오기는 동일한 PNA 규칙을 따릅니다.
Chrome 124부터 다음 단계에 따라 시행을 테스트할 수 있습니다.
chrome://flags/#private-network-access-ignore-worker-errors
사용 중지chrome://flags/#private-network-access-respect-preflight-results
사용 설정
확장된 보호 조치: 탐색 가져오기
PNA는 CSRF 공격에 사용될 수 있으므로 탐색 가져오기(iframe, 팝업)에도 적용됩니다. Chrome 123에서 실패에 대한 경고가 표시되기 시작했으며 Chrome 130부터 시행될 예정입니다.
Chrome 124부터 다음과 같이 시정 조치를 테스트할 수 있습니다.
chrome://flags/#private-network-access-ignore-navigation-errors
사용 중지chrome://flags/#private-network-access-respect-preflight-results
사용 설정
PNA에서 탐색 요청을 차단하면 수동으로 새로고침하고 요청을 허용할 수 있는 옵션과 함께 특정 오류가 사용자에게 표시됩니다.
<ph type="x-smartling-placeholder">웹사이트가 영향을 받는 경우 어떻게 해야 하나요?
비공개 네트워크 액세스: 프리플라이트 소개 게시물에 안내가 포함되어 있습니다. 탐색 요청의 경우 다음 사항이 중요합니다.
Access-Control-Allow-Origin
은 와일드 카드("*"
)가 될 수 없습니다.Access-Control-Allow-Credentials
은"true"
로 설정해야 합니다.
다음 단계
- WebSocket: Chrome 126부터 PNA에서 WebSocket 핸드셰이크를 다룹니다(경고 먼저).
- 전체 시행: Chrome 130에서는 모든 PNA 제한사항이 잠정적으로 적용됩니다 (규정을 준수하지 않는 요청 차단). 사용자는 신뢰할 수 있는 사이트의 PNA를 재정의하는 사이트 설정을 사용할 수 있습니다.
비공개 네트워크 사용 사례에 대한 의견
공개 네트워크의 요청이 필요한 비공개 네트워크에서 웹사이트를 호스팅하는 경우 Chrome팀에 의견을 보내주세요. Chromium Issue Tracker (구성요소: Blink>SecurityFeature>CORS>PrivateNetworkAccess)에서 문제를 신고합니다.