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

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)로 확인되는 대상입니다.

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

로컬 네트워크 액세스 권한은 보안 컨텍스트로 제한되며 로컬 네트워크 기기를 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://local-network-access-testing.glitch.me/에서 확인할 수 있습니다.

알려진 문제 및 제한사항

  • 새 권한 메시지는 현재 데스크톱 Chrome에서만 구현됩니다. Android Chrome으로 이식하기 위해 노력하고 있습니다. (crbug.com/400455013에서 추적)
  • WebSockets (crbug.com/421156866), WebTransport (crbug.com/421216834), WebRTC (crbug.com/421223919)의 로컬 네트워크 연결은 아직 LNA 권한으로 제한되지 않습니다.
  • 현재 서비스 워커의 로컬 네트워크 요청을 하려면 서비스 워커의 출처에 이전에 로컬 네트워크 액세스 권한이 부여되어 있어야 합니다.
    • 애플리케이션이 서비스 워커에서 로컬 네트워크 요청을 하는 경우 현재 권한 메시지를 트리거하려면 애플리케이션에서 로컬 네트워크 요청을 별도로 트리거해야 합니다. 사용 가능한 활성 문서가 있는 경우 작업자가 권한 메시지를 트리거할 수 있는 방법을 연구하고 있습니다. crbug.com/404887282를 참고하세요.

Chrome 139 이상

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

또한 로컬 네트워크 요청을 할 수 있는 사이트와 할 수 없는 사이트를 제어하는 Chrome Enterprise 정책 (해당 사이트에 대한 권한을 사전 부여 또는 사전 거부)도 추가됩니다. 이렇게 하면 기업 설정의 Chrome 설치와 같은 관리 Chrome 설치에서 의도된 것으로 알려진 사용 사례에 대한 경고를 표시하지 않거나 사이트가 권한을 요청하지 못하도록 더 잠글 수 있습니다.

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

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

의견을 보내주세요

비공개 네트워크 액세스 개발에 관한 이전 의견은 새로운 로컬 네트워크 액세스 권한 접근 방식을 설정하는 데 큰 도움이 되었습니다. 지난 몇 년간 참여해 주신 모든 분께 다시 한번 감사드립니다.

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

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