Chrome 50에서 안전하지 않은 출처에서 위치정보 API가 삭제됨

Chrome은 안전하지 않은 출처에서 위치정보와 같은 강력한 기능을 지원 중단하려는 공개 의도를 가지고 있으며 다른에서도 지원될 것을 기대하고 있습니다.

Chrome 50부터 Chrome은 비보안 연결로 제공되는 페이지에서 HTML5 Geolocation API를 사용하여 사용자 위치를 가져오는 기능을 더 이상 지원하지 않습니다. 즉, Geolocation API를 호출하는 페이지는 HTTPS와 같은 보안 컨텍스트에서 제공되어야 합니다.

이는 위치정보 API를 사용해야 하고 https를 통해 제공되지 않는 모든 사이트에 직접적인 영향을 미치게 되므로 중요한 문제이지만, Google에서는 웹의 모든 사용자에게 유익하다고 믿고 있는 변경사항입니다. 이 게시물은 이유와 진행 방법을 이해하는 데 도움이 될 것입니다.

언제 변경되나요?

이 변경사항은 Chrome 50(2016년 4월 20일 오후 12시(PST))부터 적용됩니다.

Chrome의 개발자 도구 콘솔은 버전 44(2015년 7월 21일 출시)부터 경고를 표시하고 있습니다.
변경하려는 이유와 논의를 설명하는 여러 가지 공개 발표가 있었습니다.

이 문제를 강조한 다른 출처는 Mobiforge (2016년 1월 26일), Wired (2016년 3월 17일), VentureBeat(2016년 4월 13일) 등 여러 곳에 있습니다.

변경하는 이유가 무엇인가요?

위치는 민감한 정보입니다. 사용자 위치 데이터의 개인 정보를 보호하기 위해 HTTPS가 필요합니다. 비보안 컨텍스트에서 사용자의 위치를 확인할 수 있다면 네트워크를 공격하는 사람이 사용자의 위치를 알 수 있습니다. 이는 사용자 개인 정보 보호를 심각하게 침해합니다.

이번 지원 중단이 누구에게 영향을 주나요?

이는 HTTP (비보안)를 통해 제공되는 페이지에서 현재 Geolocation API를 사용하는 모든 페이지에 영향을 미칩니다. Geolocation API를 사용하는 HTTPS iframe이 HTTP 페이지에 삽입된 경우 영향을 받습니다. HTTPS 전송 공유 프레임을 사용하여 폴리필할 수 없습니다.

웹 앱 전체가 HTTPS를 사용해야 하나요?

위치정보를 사용하기 위해 전체 앱을 HTTPS를 통해 제공해야 하는 것은 아닙니다. 위치정보를 사용하는 페이지만 보안 컨텍스트를 통해 제공해야 합니다. 현재 보안 컨텍스트는 HTTPS 또는 localhost에서 최상위 수준에서 호스팅되는 모든 것을 의미합니다. 예를 들어 보안 출처를 가리키지만 안전하지 않은 출처 (http ://paul.kinlan.me/)에서 호스팅되는 iframe은 위치정보 API를 호출할 수 없습니다.

강력한 신규 및 기존 브라우저 기능에 보안 출처가 필요하므로 HTTPS로 이전하는 것이 좋습니다.

이것이 로컬 개발에 영향을 미치나요?

이렇게 하면 안 되는 경우, localhost는 사양에서 '잠재적 보안'으로 선언되어 있으며, 이 경우 localhost를 통해 최상위 수준에서 제공되는 위치정보 요청은 계속 작동합니다.

보안 컨텍스트에 있지 않아 위치정보가 차단되었는지 런타임에 감지할 수 있나요?

예. 위치정보 사양은 Geolocation API의 실패 콜백에 전달되는 PositionError 객체를 정의합니다. 객체는 codemessage 속성을 정의합니다.

이 보안 컨텍스트 문제로 인한 오류는 1의 code를 반환하며 이는 '권한 거부 오류'입니다. 사용자가 액세스를 거부했거나 시스템에서 사용자 위치에 대한 액세스를 거부한 경우 이 오류가 발생할 수 있습니다. 즉, 메시지에서 정확한 이유가 무엇인지 확인해야 합니다.

이는 향후 변경될 수 있으므로 불안정할 수 있지만 안전하지 않은 콘텐츠 문제임을 나타내는 강력한 신호는 '보안 출처만 허용됨' 문자열을 찾는 것입니다.

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

페이지가 https에 있지만 안전하지 않은 컨텍스트에서 호스팅되는 iframe 내부에 있을 수 있으므로 페이지의 출처만 확인할 수는 없습니다.

Geolocation을 사용해야 합니다. 어떻게 해야 하나요?

HTML5 Geolocation API를 사용하고 싶거나 사이트에서 이미 Geolocation API를 사용하고 있는 경우, 안전한 환경에서 Geolocation API를 호출하는 페이지를 HTTPS로 이전하시기 바랍니다.

이러한 변경사항의 영향을 받지 않는 사용자 위치를 가져오는 데 사용할 수 있는 다양한 대체 옵션이 있습니다. 예를 들면 Google Maps Geolocation API, GeoIP (예: 다른 지역 기반 솔루션이 있음), 사용자가 입력한 우편번호가 있습니다. 하지만 위치정보에 지속적으로 액세스할 수 있는 가장 좋은 방법은 HTTPS로 이동하는 것을 적극 권장합니다.