現在,使用 JavaScript 的 位置資訊 API 時,可以根據周圍環境及參數獲得精確到公尺的數值。
換句話說,無論是自家、工作地點,還是通勤通學路線,甚至是其他所浸潤的宗教醫院或風俗場所,都會被準確掌握。
然而,有許多服務像是天氣預報等,並不需要如此高的精度,只要能知道幾公里或幾十公里的範圍便已足夠。
那麼,有沒有方法可以在不提供不必要的精確個人資訊的情況下,提供有用的位置信息呢?
因此,提出了獲取高安全性的大約位置資訊的方法,以替代目前的精確位置資訊。
以下是該建議的概要,Approximate Geolocation。
順便一提,這項建議當然是由 Google 提出的,但這次 raro 考慮了隱私的因素。
可能是因為許可提供精確位置資訊的人數比預期的少。
針對 Geolocation API,提出加入大約位置資訊的建議。
共享精確位置資訊可能會導致使用者的私生活秘辛洩漏,例如自宅地址、工作地點、宗教場所等。
然而,使用者有時也希望共享位置資訊以進行本地化或交易等操作。
若是僅提供類似郵遞區號的粗略位置資訊,對隱私的風險就會相對較低,大多數應用也能接受這程度的精度。
透過擴展 Geolocation API 來支持大約位置資訊,可以讓使用者保障位置資訊的隱私,同時網站方亦能要求更高安全性的位置信息。
此外,在某些地區,法規禁止獲取精確位置資訊,而“精確”的定義則由最大半徑決定。
Web 瀏覽器若能支持滿足這些要求的大約位置資訊 API,便能夠遵循合規性。
行動 OS 已經提供使用者能控制大約位置資訊的功能。
iOS 在 14 版引入了“精確位置資訊”設置。
若關閉此選項,將會發送大約的位置信息。
其精度依據目前位置的人口密度決定,大約在 2 公里至 10 公里之間。
Android 在 12 版開始允許授予大約位置資訊及精確位置資訊的權限。
大約位置資訊的最低精度為 2 公里。
此提案引入了大約位置資訊與精確位置資訊的概念。
精確位置資訊是指精度半徑低於某個固定值的位置信息。
該提案建議設定的邊界至少為 2 公里。
將引入一個新的權限“約略位置資訊”。
現有的“位置資訊”權限則變更為“精確位置資訊”。
網站在擁有“約略位置資訊”或“精確位置資訊”任一權限的情況下,均可訪問位置資訊。
關於“約略位置資訊”許可提示的 UI,此提案中不做規範。
用戶代理需要讓使用者能選擇“約略位置資訊”或“精確位置資訊”。
當系統提供“約略位置資訊”功能時,瀏覽器將優先使用該功能。
使用精確位置資訊時,則需應用粗化算法進行轉換。
粗化算法必須設計成不讓人能反推精確位置資訊。
粗化算法的範例可參考 Android 平臺的位置信息 API 中使用的 LocationFudger。
該算法使用了 snap-to-grid 和隨機偏移這兩種技術。
snap-to-grid 為精確位置資訊和大約位置資訊之間生成多對一的映射。
隨機偏移則是在越過格點邊界時,防止能反推出精確位置資訊。
在調用 getCurrentPosition
和 watchPosition
時,可以添加請求大約位置資訊的參數。
navigator.geolocation.getCurrentPosition(
onsuccess, onerror, {accuracyMode: 'approximate'});
潛在的規範變更。
介紹精確位置資訊和大約位置資訊的概念,以及精確位置資訊的精度。
PositionOptions 可以作為 getCurrentPosition
和 watchPosition
的參數傳遞。
dictionary PositionOptions {
boolean enableHighAccuracy = false;
[Clamp] unsigned long timeout = 0xFFFFFFFF;
[Clamp] unsigned long maximumAge = 0;
// 新增
AccuracyMode accuracyMode = "precise";
};
enum AccuracyMode {
// 精確位置資訊
"precise",
// 大約位置資訊
"approximate"
};
將在 PositionOptions
中新增成員 accuracyMode
。
在調用時,若要求大約位置資訊時,傳遞值 approximate
,要求精確位置資訊時則傳遞值 precise
。
為了相容性,若不傳遞 accuracyMode
,將預設使用 precise
為值。
為了讓開發者能接收位置資訊的精度信息,將在接口 GeolocationPosition
中新增屬性 accuracyMode
。
這樣,網站就能判斷所處的位置信息是精確還是大約的。
在要求精確位置資訊卻只獲得大約位置資訊的情況下會特別有用。
[Exposed=Window, SecureContext]
interface GeolocationPosition {
readonly attribute GeolocationCoordinates coords;
readonly attribute EpochTimeStamp timestamp;
// 新增
readonly attribute AccuracyMode accuracyMode;
[Default] object toJSON();
};
能否支持約略位置資訊可以用以下代碼進行檢測。
function browserImplementsAccuracyMode() {
try {
navigator.geolocation.getCurrentPosition(
() => {}, () => {},
{
get accuracyMode() { throw new Error('1'); },
get enableHighAccuracy() { throw new Error('2'); }
});
} catch (e) {
if (e.message === '1') {
return true;
}
console.assert(e.message === '2');
return false;
}
console.assert(false, '這裡不應該到達');
}
除了當前的位置信息權限 geolocation
外,還需定義大約位置資訊權限 geolocation-approximate
。
若允許 geolocation
,則 geolocation-approximate
也將自動被允許。
若拒絕 geolocation-approximate
,則 geolocation
也會自動被拒絕。
換句話說,若使用者拒絕大約位置資訊,則正確的位置信息也會被拒絕。
若使用者允許精確位置資訊,大約位置資訊的訪問權限亦將被允許。
關於可能的權限狀態及轉換,請參考 Permissions.query() 的行為分析,這裡的分析。
當網站請求位置資訊且參數 accuracyMode="approximate"
不被使用時,使用者將被要求選擇精確位置資訊或大約位置資訊中的一種。
當網站請求位置資訊且參數為 accuracyMode="approximate"
時,使用者將被要求提供大約位置資訊。
若已被允許大約位置資訊的狀態下要求精確位置資訊,則使用者則會被要求提供精確位置資訊。
因此,通過返回包含數公里誤差的位置信息,可以在不洩露實際身分的情況下使用位置服務。
這樣就能幾乎消除被精確識別的可能性。
然而,究竟有多少人會特意拒絕“精確位置資訊”但又只允許“約略位置資訊”呢?
對了,智慧型手機的“約略位置資訊”,如果多次快速點擊的話,因為是以自身為中心的範圍繪製,所以最後會不會弄得“精確位置資訊”顯現出來呢?這我之前就有這樣的懷疑,根據提案的說法似乎有用 snap-to-grid 和隨機偏移魚做了對策。
不過,我的想法大概連最基本的對策都會考慮到。
不過具體的處理方式我還不是太了解,最終輸出會是怎麼樣的呢?
我本想找找看有沒有類似於測試迅速點擊會發生什麼的文章,但意外地沒有找到。
原文出處:https://qiita.com/rana_kualu/items/9e6304b90f9532e9bf9e