現在,使用 JavaScript 的 位置資訊 API 時,可以根據周圍環境及參數獲得精確到公尺的數值。
換句話說,無論是自家、工作地點,還是通勤通學路線,甚至是其他所浸潤的宗教醫院或風俗場所,都會被準確掌握。

然而,有許多服務像是天氣預報等,並不需要如此高的精度,只要能知道幾公里或幾十公里的範圍便已足夠。
那麼,有沒有方法可以在不提供不必要的精確個人資訊的情況下,提供有用的位置信息呢?

因此,提出了獲取高安全性的大約位置資訊的方法,以替代目前的精確位置資訊。
以下是該建議的概要,Approximate Geolocation

順便一提,這項建議當然是由 Google 提出的,但這次 raro 考慮了隱私的因素。
可能是因為許可提供精確位置資訊的人數比預期的少。

Approximate Geolocation 說明

針對 Geolocation API,提出加入大約位置資訊的建議。

動機

共享精確位置資訊可能會導致使用者的私生活秘辛洩漏,例如自宅地址、工作地點、宗教場所等。
然而,使用者有時也希望共享位置資訊以進行本地化或交易等操作。
若是僅提供類似郵遞區號的粗略位置資訊,對隱私的風險就會相對較低,大多數應用也能接受這程度的精度。
透過擴展 Geolocation API 來支持大約位置資訊,可以讓使用者保障位置資訊的隱私,同時網站方亦能要求更高安全性的位置信息。

此外,在某些地區,法規禁止獲取精確位置資訊,而“精確”的定義則由最大半徑決定。
Web 瀏覽器若能支持滿足這些要求的大約位置資訊 API,便能夠遵循合規性。

  • 加州,精確位置資訊的半徑精度定義為 1850 英尺(564 公尺)。
  • 康乃狄克州,精確位置資訊的半徑精度定義為 1750 英尺(533 公尺)。
  • 猶他州,精確位置資訊的半徑精度定義為 1750 英尺(533 公尺)。
  • 維吉尼亞州 ,精確位置資訊的半徑精度定義為 1750 英尺(533 公尺)。

行動 OS 已經提供使用者能控制大約位置資訊的功能。

iOS 在 14 版引入了“精確位置資訊”設置。
若關閉此選項,將會發送大約的位置信息。
其精度依據目前位置的人口密度決定,大約在 2 公里至 10 公里之間。

Android 在 12 版開始允許授予大約位置資訊及精確位置資訊的權限。
大約位置資訊的最低精度為 2 公里。

提案

此提案引入了大約位置資訊與精確位置資訊的概念。
精確位置資訊是指精度半徑低於某個固定值的位置信息。
該提案建議設定的邊界至少為 2 公里。

將引入一個新的權限“約略位置資訊”。
現有的“位置資訊”權限則變更為“精確位置資訊”。
網站在擁有“約略位置資訊”或“精確位置資訊”任一權限的情況下,均可訪問位置資訊。

關於“約略位置資訊”許可提示的 UI,此提案中不做規範。
用戶代理需要讓使用者能選擇“約略位置資訊”或“精確位置資訊”。

當系統提供“約略位置資訊”功能時,瀏覽器將優先使用該功能。
使用精確位置資訊時,則需應用粗化算法進行轉換。
粗化算法必須設計成不讓人能反推精確位置資訊。

粗化算法的範例可參考 Android 平臺的位置信息 API 中使用的 LocationFudger
該算法使用了 snap-to-grid 和隨機偏移這兩種技術。
snap-to-grid 為精確位置資訊和大約位置資訊之間生成多對一的映射。
隨機偏移則是在越過格點邊界時,防止能反推出精確位置資訊。

在調用 getCurrentPositionwatchPosition 時,可以添加請求大約位置資訊的參數。

範例

navigator.geolocation.getCurrentPosition(
    onsuccess, onerror, {accuracyMode: 'approximate'});

潛在的規範變更

潛在的規範變更。

介紹

介紹精確位置資訊和大約位置資訊的概念,以及精確位置資訊的精度。

PositionOptions 字典

PositionOptions 可以作為 getCurrentPositionwatchPosition 的參數傳遞。

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 中暴露精度等級

為了讓開發者能接收位置資訊的精度信息,將在接口 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


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝10   💬7   ❤️12
445
🥈
我愛JS
📝1   💬6   ❤️4
92
🥉
酷豪
📝1   ❤️1
54
#4
AppleLily
📝1   💬4   ❤️1
45
#5
💬3  
10
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次