로컬 네트워크 액세스를 위한 새로운 권한 메시지

Chris Thompson
Chris Thompson

게시일: 2025년 6월 9일

Chrome에서는 로컬 네트워크 액세스 사양의 일환으로 사용자의 로컬 네트워크에 연결하는 사이트를 위한 새로운 권한 메시지를 추가하고 있습니다. 목표는 비공개 네트워크에서 라우터 및 기타 기기를 타겟팅하는 크로스 사이트 요청 위조 (CSRF) 공격으로부터 사용자를 보호하고 사이트가 이러한 요청을 사용하여 사용자의 로컬 네트워크를 지문으로 식별할 수 있는 기능을 줄이는 것입니다.

이 변경사항이 웹 생태계에 미치는 영향을 파악하기 위해 Chrome팀은 사용자의 로컬 네트워크 또는 사용자의 머신에서 로컬로 실행되는 소프트웨어에 연결하는 데 의존하는 웹 애플리케이션을 빌드하는 개발자의 의견을 기다리고 있습니다. Chrome 138부터 chrome://flags/#local-network-access-check로 이동하여 플래그를 '사용 설정 (차단)'으로 설정하면 이러한 새로운 제한사항을 선택할 수 있습니다.

로컬 네트워크 액세스란 무엇인가요?

로컬 네트워크 액세스는 웹사이트가 사용자의 로컬 네트워크에 있는 서버 (사용자의 머신에서 로컬로 실행되는 서버 포함)에 요청을 전송하는 기능을 제한하여 이러한 요청을 실행하기 전에 사용자가 사이트에 권한을 부여하도록 요구합니다. 이 권한을 요청하는 기능은 보안 컨텍스트로 제한됩니다.

'로컬 네트워크에서 원하는 기기를 찾아 연결'이라는 텍스트가 포함된 메시지
Chrome의 로컬 네트워크 액세스 권한 메시지의 예

Android, iOS, MacOS와 같은 다른 많은 플랫폼에는 로컬 네트워크 액세스 권한이 있습니다. 예를 들어 새 Google TV 및 Chromecast 기기를 설정할 때 Google Home 앱에 로컬 네트워크 액세스 권한을 부여했을 수 있습니다.

어떤 종류의 요청이 영향을 받나요?

로컬 네트워크 액세스의 첫 번째 주요 단계에서는 공개 네트워크에서 로컬 네트워크 또는 루프백 대상으로 전송되는 모든 요청을 '로컬 네트워크 요청'으로 간주합니다.

로컬 네트워크는 IPv4에서 RFC1918의 섹션 3에 정의된 비공개 주소 공간으로 확인되는 모든 대상입니다 (예: 192.168.0.0/16), 매핑된 IPv4 주소가 비공개인 IPv4 매핑 IPv6 주소 또는 ::1/128, 2000::/3, ff00::/8 서브넷 외부의 IPv6 주소입니다.

루프백은 IPv4의 RFC1122 3.2.1.3절에 정의된 '루프백' 공간(127.0.0.0/8), IPv4의 RFC3927에 정의된 '링크 로컬' 공간(169.254.0.0/16), IPv6의 RFC4193 3절에 정의된 '고유 로컬 주소' 접두사 (fcc00::/7) 또는 IPv6의 RFC4291 2.5.6절에 정의된 '링크 로컬' 접두사 (fe80::/10)로 확인되는 모든 대상입니다.

IP 주소와 주소 공간의 전체 매핑은 로컬 네트워크 액세스 사양의 표를 참고하세요.

공개 네트워크는 다른 모든 대상입니다.

로컬 네트워크 액세스 권한은 보안 컨텍스트로 제한되고 로컬 네트워크 기기를 HTTPS로 이전하기 어려울 수 있으므로 권한으로 관리되는 로컬 네트워크 요청은 이제 Chrome에서 대상이 확인되기 전에 요청이 로컬 네트워크로 전송된다는 것을 알고 있는 경우 혼합 콘텐츠 검사에서 제외됩니다. Chrome은 다음과 같은 경우 요청이 로컬 네트워크로 전송된다고 인식합니다.

  • 요청 호스트 이름이 비공개 IP 리터럴입니다 (예: 192.168.0.1)
  • 요청 호스트 이름은 .local 도메인입니다.
  • fetch() 호출은 targetAddressSpace: "local". 옵션으로 주석이 지정됩니다.
// Example 1: Private IP literal is exempt from mixed content.
fetch("http://192.168.0.1/ping");

// Example 2: `.local` domain is exempt from mixed content.
fetch("http://router.local/ping");

// Example 3: Public domain is not exempt from mixed content,
// even if it resolves to a local network address.
fetch("http://example.com/ping");

// Example 4: Adding the `targetAddressSpace` option flags that
// the request will go to the local network, and is thus exempt
// from mixed content.
fetch("http://example.com/ping", {
  targetAddressSpace: "local",
});

Chrome의 변경사항

Chrome 138

로컬 네트워크 액세스의 초기 버전이 Chrome 138에서 선택 테스트를 위해 준비되었습니다. 사용자는 chrome://flags#local-network-access-check을 '사용 설정 (차단)'으로 설정하여 새 권한 메시지를 사용 설정할 수 있습니다. 이를 통해 JavaScript fetch() API, 하위 리소스 로드, 하위 프레임 탐색을 사용하여 시작된 요청에 대해 로컬 네트워크 액세스 권한 메시지를 트리거할 수 있습니다.

다양한 형태의 로컬 네트워크 요청을 트리거할 수 있는 데모 사이트가 https://lna-testing.notyetsecure.com/에 있습니다.

알려진 문제 및 제한사항

  • 로컬 네트워크에 대한 WebSocket (crbug.com/421156866), WebTransport (crbug.com/421216834), WebRTC (crbug.com/421223919) 연결은 아직 LNA 권한으로 관리되지 않습니다.
  • 서비스 워커 및 공유 워커의 로컬 네트워크 요청에는 워커의 출처에 이전에 로컬 네트워크 액세스 권한이 부여되어 있어야 합니다.
    • 애플리케이션이 서비스 워커에서 로컬 네트워크 요청을 하는 경우 권한 메시지를 트리거하려면 애플리케이션에서 별도로 로컬 네트워크 요청을 트리거해야 합니다. (작업자가 사용 가능한 활성 문서가 있는 경우 권한 메시지를 트리거할 수 있는 방법을 마련하고 있습니다. crbug.com/404887282를 참고하세요.)

Chrome 139 이상

Google의 목표는 최대한 빨리 로컬 네트워크 액세스를 제공하는 것입니다. 일부 사이트에서 로컬 네트워크 액세스 주석으로 업데이트하는 데 시간이 더 필요할 수 있다는 점을 고려하여 기본적으로 로컬 네트워크 액세스를 제공하기 전에 사이트에서 보안 컨텍스트 요구사항을 일시적으로 선택 해제할 수 있도록 오리진 트라이얼을 추가할 예정입니다. 이렇게 하면 특히 HTTP를 통해 로컬 네트워크 리소스에 액세스하는 경우 개발자에게 더 명확한 이전 경로가 제공됩니다. 아직 로컬 네트워크 액세스 혼합 콘텐츠 예외를 지원하지 않는 브라우저에서 HTTPS 페이지에서 요청하는 경우 이러한 요청이 혼합 콘텐츠로 차단되기 때문입니다.

또한 어떤 사이트가 로컬 네트워크 요청을 할 수 있는지 (해당 사이트에 권한을 미리 부여하거나 미리 거부) 제어하는 Chrome 엔터프라이즈 정책도 추가할 예정입니다. 이를 통해 관리 Chrome 설치(예: 회사 설정의 설치)는 알려진 의도된 사용 사례에 대한 경고를 표시하지 않거나 사이트가 권한을 전혀 요청할 수 없도록 추가로 잠글 수 있습니다.

Google은 로컬 네트워크에 요청을 보낼 수 있는 다양한 기능과 로컬 네트워크 액세스 권한을 계속 통합할 계획입니다. 예를 들어 WebSockets, WebTransport, WebRTC 연결을 위한 로컬 네트워크 액세스를 곧 출시할 예정입니다.

Chrome에서 로컬 네트워크 액세스를 완전히 출시할 수 있게 되면 자세한 정보를 공유해 드리겠습니다.

의견을 보내 주세요

비공개 네트워크 액세스 개발에 관한 이전 의견은 새로운 로컬 네트워크 액세스 권한 접근 방식을 안내하는 데 매우 유용했습니다. 수년간 참여해 주신 모든 분께 다시 한번 감사드립니다.

사용자의 로컬 네트워크 또는 사용자의 머신에서 로컬로 실행되는 소프트웨어에 연결하는 데 의존하는 웹사이트를 개발하거나 사용하는 경우 Chrome팀은 의견과 사용 사례에 관심이 있습니다. 다음 두 가지 방법으로 도움을 줄 수 있습니다.

  • chrome://flags#local-network-access-check로 이동하여 플래그를 '사용 설정(차단)'으로 설정하고 웹사이트에서 새 권한 메시지가 올바르게 트리거되는지 (권한을 부여한 후 예상대로 작동하는지) 확인합니다.
  • 문제가 발생하거나 의견이 있으면 Chromium 문제 추적기 또는 LNA 사양 GitHub 저장소에 문제를 신고하세요. Chrome은 여러분의 의견을 기다립니다.