Xoá API vị trí địa lý khỏi các nguồn gốc không an toàn trong Chrome 50

Chrome có ý định công khai sẽ ngừng sử dụng các tính năng mạnh mẽ như định vị vị trí trên các nguồn gốc không an toàn, và chúng tôi hy vọng rằng những tính năng khác sẽ làm theo.

Kể từ Chrome 50, Chrome không còn hỗ trợ việc thu thập thông tin vị trí của người dùng bằng cách sử dụng API vị trí địa lý HTML5 từ các trang được phân phối bằng kết nối không an toàn. Điều này có nghĩa là trang thực hiện lệnh gọi API vị trí địa lý phải được phân phát từ ngữ cảnh an toàn, chẳng hạn như HTTPS.

Đây là một vấn đề quan trọng vì vấn đề này sẽ ảnh hưởng trực tiếp đến mọi trang web yêu cầu sử dụng API vị trí địa lý và không được phân phối qua https, nhưng chúng tôi cho rằng thay đổi này sẽ có lợi cho tất cả người dùng trên web. Bài đăng này sẽ giúp bạn hiểu lý do và cách tiếp tục.

Khi nào việc đổi tên diễn ra?

Thay đổi này có hiệu lực kể từ Chrome 50 (12 giờ trưa theo giờ PST ngày 20 tháng 4 năm 2016).

Bảng điều khiển công cụ cho nhà phát triển của Chrome đã cung cấp cảnh báo kể từ phiên bản 44 (phát hành ngày 21 tháng 7 năm 2015).
Đã có một số thông báo công khai giải thích lý do (và nội dung thảo luận) về lý do chúng tôi thực hiện thay đổi này:

Một số nguồn khác đã nêu bật thông tin này: Mobiforge (ngày 26 tháng 1 năm 2016), Wired (ngày 17 tháng 3 năm 2016), VentureBeat (ngày 13 tháng 4 năm 2016).

Tại sao chúng tôi thực hiện thay đổi này?

Vị trí là dữ liệu nhạy cảm! Việc yêu cầu HTTPS là bắt buộc để bảo vệ quyền riêng tư cho dữ liệu vị trí của người dùng. Nếu vị trí của người dùng có sẵn trong bối cảnh không an toàn, thì kẻ tấn công trên mạng sẽ có thể biết vị trí của người dùng. Điều này xâm phạm nghiêm trọng quyền riêng tư của người dùng.

Điều này ảnh hưởng đến ai?

Điều này ảnh hưởng đến những trang hiện đang sử dụng API vị trí địa lý từ các trang được phân phát qua HTTP (không an toàn). API này cũng ảnh hưởng đến các iframe HTTPS sử dụng API vị trí địa lý nếu các iframe này được nhúng vào các trang HTTP. (Bạn sẽ không thể sử dụng polyfill khi sử dụng khung được phân phối qua HTTPS được chia sẻ.)

Toàn bộ ứng dụng web của tôi có cần HTTPS không?

Yêu cầu này không phải là một yêu cầu bắt buộc toàn bộ ứng dụng phải được phân phát qua HTTPS để sử dụng Vị trí địa lý. Chỉ những trang sử dụng Vị trí địa lý mới cần được phân phát trong ngữ cảnh bảo mật. Hiện tại, ngữ cảnh an toàn là mọi nội dung được lưu trữ ở cấp cao nhất trên HTTPS hoặc localhost. Ví dụ: một iframe trỏ đến một nguồn gốc bảo mật nhưng được lưu trữ trên nguồn gốc không được bảo mật (http ://paul.kinlan.me/) sẽ không được phép gọi API định vị vị trí.

Bạn nên di chuyển sang HTTPS vì các tính năng mới và mạnh mẽ của trình duyệt hiện có yêu cầu nguồn gốc bảo mật.

Điều này có ảnh hưởng đến sự phát triển của địa phương không?

Điều này là không nên, localhost đã được khai báo là "có thể an toàn" theo thông số kỹ thuật và trong trường hợp của chúng tôi, các yêu cầu về vị trí địa lý được phân phối ở cấp cao nhất qua localhost sẽ vẫn hoạt động.

Tôi có thể phát hiện trong thời gian chạy xem vị trí địa lý có bị chặn do không ở trong ngữ cảnh an toàn không

Có. Thông số vị trí địa lý xác định một đối tượng PositionError được chuyển vào lệnh gọi lại lỗi của API vị trí địa lý. Đối tượng xác định các thuộc tính codemessage.

Các lỗi do vấn đề ngữ cảnh bảo mật này sẽ trả về code trên 1 là "Lỗi bị từ chối cấp quyền". Bạn có thể gặp lỗi này khi người dùng từ chối quyền truy cập hoặc khi hệ thống từ chối quyền truy cập vào thông tin vị trí của người dùng. Điều này có nghĩa là bạn sẽ phải kiểm tra thư để xem lý do chính xác là gì.

Việc này khá dễ gây gián đoạn vì có thể thay đổi trong tương lai, nhưng một tín hiệu rõ ràng cho thấy vấn đề về nội dung không an toàn là tìm chuỗi "Chỉ cho phép các nguồn gốc an toàn".

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

Hãy nhớ rằng bạn không thể chỉ kiểm tra nguồn gốc của trang vì trang của bạn có thể nằm trên https nhưng lại nằm trong một iframe được lưu trữ từ một ngữ cảnh không an toàn.

Tôi thực sự cần sử dụng Định vị vị trí. Tôi nên làm gì?

Nếu bạn muốn sử dụng API vị trí địa lý HTML5 hoặc nếu trang web của bạn đã sử dụng API vị trí địa lý, vui lòng di chuyển các trang thực hiện lệnh gọi API vị trí địa lý đến HTTPS, để đảm bảo rằng các trang đó được sử dụng trong ngữ cảnh bảo mật.

Có một số lựa chọn dự phòng sẵn có để nhận thông tin vị trí của người dùng không bị ảnh hưởng bởi thay đổi này, chẳng hạn như API vị trí địa lý của Google Maps, GeoIP (ví dụ: có các giải pháp dựa trên vị trí địa lý khác) và mã bưu chính do người dùng nhập. Tuy nhiên, bạn rất nên chuyển sang giao thức HTTPS để đảm bảo quyền truy cập liên tục vào vị trí địa lý.