Chrome은 안전하지 않은 출처에서 위치정보와 같은 강력한 기능을 지원 중단할 공개 의도를 가지고 있으며 다른 업체도 이를 따르기를 바랍니다.
Chrome 50부터 Chrome은 더 이상 안전하지 않은 연결을 통해 전송된 페이지에서 HTML5 Geolocation API를 사용하여 사용자의 위치를 가져오는 기능을 지원하지 않습니다. 즉, Geolocation API를 호출하는 페이지는 HTTPS와 같은 보안 컨텍스트에서 제공되어야 합니다.
이는 위치정보 API를 사용해야 하며 https를 통해 제공되지 않는 모든 사이트에 직접적인 영향을 미치므로 중요한 문제이지만 웹의 모든 사용자에게 유익하다고 생각되는 변경사항입니다. 이 게시물은 이유와 진행 방법을 이해하는 데 도움이 됩니다.
언제 변경되나요?
이 변경사항은 Chrome 50(2016년 4월 20일 오후 12시(PST))부터 적용됩니다.
Chrome의 개발자 도구 콘솔은 버전 44(2015년 7월 21일 출시)부터 경고를 제공하고 있습니다.
이번 변경사항을 도입한 이유에 관한 사유(및 논의)를 설명하는 여러 공개 공지사항이 게시되었습니다.
- HTTP를 통한 강력한 기능 세트를 지원 중단할 의도(2015년 2월)
- HTTP를 통한 Geolocation API 지원 중단 예정(2015년 11월)
- Chrome Dev Summit (2016년 11월)
- Chrome 베타 채널 출시 블로그 (2016년 3월 17일)
- Chrome 상태 웹사이트
이 문제를 강조하는 다른 출처로는 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 객체를 정의합니다. 이 객체는 code
및 message
속성을 정의합니다.
이 보안 컨텍스트 문제로 인한 오류는 '권한 거부 오류'인 code
1을 반환합니다.
사용자가 액세스를 거부했거나 시스템에서 사용자의 위치에 대한 액세스를 거부한 경우 이 오류가 발생할 수 있습니다. 따라서 메시지를 확인하여 정확한 이유를 알아야 합니다.
이는 향후 변경될 수 있으므로 매우 취약할 수 있지만, 'Only secure origins are allowed'(안전한 출처만 허용됨) 문자열을 찾으면 안전하지 않은 콘텐츠 문제라는 강력한 신호를 보낼 수 있습니다.
navigator.geolocation.getCurrentPosition(success => {
/* Do some magic. */
}, failure => {
if (failure.message.startsWith("Only secure origins are allowed")) {
// Secure Origin issue.
}
});
페이지가 https에 있지만 안전하지 않은 컨텍스트에서 호스팅되는 iframe 내에 있을 수 있으므로 페이지의 출처만 확인해서는 안 됩니다.
위치정보를 사용해야 하는데 어떻게 해야 하나요?
HTML5 Geolocation API를 사용하려는 경우 또는 사이트에서 이미 Geolocation API를 사용하는 경우 Geolocation API를 호출하는 페이지를 HTTPS로 이전하여 안전한 컨텍스트에서 사용되도록 하세요.
Google Maps Geolocation API, GeoIP (예: 다른 지역 기반 솔루션이 있음), 사용자가 입력한 우편번호 등 이 변경사항의 영향을 받지 않는 사용자 위치를 가져오는 데 사용할 수 있는 여러 대체 옵션이 있습니다. 하지만 위치정보에 지속적으로 액세스하려면 HTTPS로 전환하는 것이 가장 좋습니다.