비보안 컨텍스트용 비공개 네트워크 액세스 (PNA) 지원 중단 체험판이 종료됩니다. PNA 권한 메시지를 구현하세요.

Yifan Luo
Yifan Luo

Chrome 124에는 혼합 콘텐츠를 완화하기 위한 비공개 네트워크 액세스 권한 기능이 포함되어 있습니다. 이번 변경사항에 대비하는 데 시간이 더 필요한 사이트를 대상으로 지원 중단 체험판이 진행되고 있지만, 이 체험판은 2024년 9월 4일에 출시될 예정인 Chrome 126을 대상으로 종료됩니다. 이 게시물에서는 변경사항, 기능 설계, 현재 웹사이트를 이전하는 방법, 구현을 테스트하는 방법을 설명합니다.

어떤 점이 달라지나요?

전역적으로 고유한 이름이 없어 TLS 인증서를 가져올 수 없는 비공개 네트워크의 기기에 대한 연결을 설정하기 위해 이 기능은 이러한 기기와 통신하려는 개발자의 인텐트를 선언하는 새로운 fetch() 옵션을 도입합니다. 여기에는 각 사이트의 이 기능에 대한 액세스를 통제하는 새로운 정책 제어 기능과 추가 메타데이터를 제공하는 서버의 프리플라이트 응답의 새 헤더가 포함됩니다.

비공개 네트워크 액세스란 무엇인가요?

비공개 네트워크 액세스 (PNA, 이전 명칭: CORS-RFC1918, 줄여서 로컬 네트워크 액세스)는 웹사이트에서 비공개 네트워크의 서버로 요청을 전송하는 기능을 제한하는 보안 기능입니다. 이렇게 하면 교차 사이트 요청 위조 (CSRF)와 같은 잠재적 공격으로부터 사용자와 내부 네트워크를 보호할 수 있습니다. Chrome은 점진적으로 PNA를 구현해 왔으며 향후 출시에서 보호 기능이 확장될 예정입니다.

권한 메시지가 필요한 이유는 무엇인가요?

Chrome 94에서는 비보안 공개 웹사이트에서의 비공개 네트워크 액세스를 차단하는 기능이 도입되었습니다. 현재 진행 중인 비보안 컨텍스트의 비공개 네트워크 액세스 지원 중단 트라이얼을 통해 영향을 받는 웹사이트를 HTTPS로 이전하는 데 어려움이 있는 것으로 나타났습니다. 일반적인 우려사항은 비공개 기기를 HTTPS로 이전하기가 어려워 혼합 콘텐츠 검사 위반으로 이어지는 것입니다.

이 문제를 해결하기 위해 Chrome 120에서는 오리진 트라이얼에, Chrome 124에서는 안정화 버전에 새로운 권한 메시지가 추가되었습니다.

권한 메시지는 언제 필요한가요?

권한 메시지 기능이 출시된 후 몇 번의 마일스톤이 지난 후 비보안 컨텍스트 지원 중단 무료 체험을 종료할 계획입니다. 호환성을 보장하려면 공개 웹사이트를 HTTPS로 이전해야 합니다. 비공개 서버를 HTTPS로 이전할 수 없는 경우 새로운 권한 메시지 기능을 사용하여 혼합 콘텐츠 검사를 완화할 수 있습니다.

권한 메시지가 표시되는 비공개 네트워크 액세스 요청의 일반적인 워크플로는 다음과 같습니다.

권한 메시지 트리거

targetAddressSpace 속성을 가져오기 옵션으로 추가하면 요청에서 혼합 콘텐츠 검사를 건너뛸 수 있습니다.

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

비공개 네트워크 액세스: 프리플라이트 도입에 따라 모든 비공개 네트워크 요청 앞에는 프리플라이트 요청이 있습니다. 이 실행 전 요청에는 새 헤더 Access-Control-Request-Private-Network: true가 포함되고 해당 응답에는 Access-Control-Allow-Private-Network: true 헤더가 포함되어야 합니다.

새로운 권한 메시지를 수용하려면 기기는 새로운 응답 헤더 두 개(Private-Network-Access-NamePrivate-Network-Access-ID)를 통합해야 합니다.

  • Private-Network-Access-ID: 콜론으로 구분된 6개의 16진수 바이트로 표시되는 48비트 값입니다.
  • Private-Network-Access-Name: ECMAScript 정규 표현식과 일치하는 문자열로 된 유효한 이름입니다. /^[a-z0-9_-.]+$/. 이름의 최대 길이는 248 UTF-8 코드 단위입니다.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

데모

https://private-network-access-permission-test.glitch.me/에서 데모를 확인할 수 있습니다.

데모 웹사이트를 사용하려면 개인 서버를 시작해야 합니다. 비공개 서버는 서버에서 지정한 헤더 Private-Network-Access-IDPrivate-Network-Access-Name와 함께 HTTP 헤더 Access-Control-Allow-Private-Network: true로 응답해야 합니다. 모든 항목이 올바르게 설정된 경우 다음 권한 메시지가 표시됩니다.

비보안 컨텍스트 지원 중단 기능 트라이얼 종료

비보안 컨텍스트용 비공개 네트워크 액세스 지원 중단 체험판을 등록한 웹사이트의 경우 새로운 권한 메시지에 따라 웹사이트를 이전하고 지금 무료 체험판을 종료하세요.

코드를 업데이트한 후 HTML, JavaScript 또는 HTTP 헤더에서 시도 토큰을 삭제합니다. 체험판 토큰을 어디에 배치했는지 기억나지 않으면 이전 블로그 게시물의 지원 중단 체험판 등록 섹션을 참고하세요.

체험판 페이지에서 토큰을 삭제할 수도 있습니다.

다음 단계

API가 아닌 fetch()의 요청에 대한 솔루션은 아직 탐색 중입니다.

서비스 워커를 사용하거나 대상 주소 공간을 새로운 콘텐츠 보안 정책으로 만드는 등 여러 솔루션을 테스트했습니다. 하지만 API 외 fetch() 요청의 최종 형태는 아직 조사 중입니다.

하위 프레임의 요청은 향후 권한 정책을 통해 지원될 수 있습니다.

향후에는 하위 프레임의 기능을 완화하는 권한 정책을 지원할 수 있습니다.

비공개 네트워크 사용 사례에 대한 의견

공용 네트워크의 요청이 필요한 비공개 네트워크에서 웹사이트를 호스팅하는 경우 Chrome팀은 여러분의 의견을 기다리고 있습니다. Chromium Issue Tracker(구성요소: Blink>SecurityFeature>CORS>PrivateNetworkAccess) 또는 GitHub 저장소에서 문제를 신고합니다.

자료