API геолокации W3C

Jan 04 2023
Риски для конфиденциальности, связанные с популярной технологией Одной из наиболее отличительных особенностей HTML 5 является API геолокации. API геолокации обеспечивает доступ к информации о географическом местоположении, связанной с устройством конечного пользователя.

Риски конфиденциальности трендовой технологии

Одной из наиболее отличительных особенностей HTML 5 является API геолокации. API геолокации обеспечивает доступ к информации о географическом местоположении, связанной с устройством конечного пользователя. До стандартизации API геолокации W3C (Консорциум World Wide Web ) было сложно получить доступ к этой информации, и это часто требовало сторонних расширений.

Хотя этот стандартизированный подход к геолокации интересен и предоставляет веб-разработчикам более простой процесс, позволяющий сделать приложения более инновационными и более полезными для тех, кто использует эти приложения, существует также потенциальный риск для конфиденциальности, связанный с API геолокации.

Браузер с поддержкой Geo IP — а это практически все современные веб-браузеры — будет запрашивать разрешение конечного пользователя, прежде чем передавать эту информацию на веб-сайт. Информация о геолокации, полученная из API, в первую очередь включает информацию о текущей долготе и широте устройства. В большинстве тестов эта информация была устрашающе близкой к местоположению, а в некоторых случаях это было точное местоположение!

API геолокации W3C определяет высокоуровневый интерфейс для информации о местоположении устройства конечного пользователя, а затем предоставляет эту информацию — с разрешения пользователя — запрашивающему веб-сайту. Известные источники информации о местоположении включают глобальную систему позиционирования (GPS) и местоположение, выведенное из сетевых сигналов, таких как IP-адрес, RFID, Wi-Fi, MAC-адреса Bluetooth, идентификаторы сот GSM/CDMA и пользовательский ввод. [ 1 ][ 7 ]

Большинство браузеров объединяют подсказки, такие как IP-адрес, информацию о пользовательском агенте браузера и список сетей Wi-Fi, обнаруженных поблизости, вместе с уровнем их сигнала, чтобы оценить свое местоположение. API также использует информацию GPS на устройствах, если устройство имеет GPS, чтобы предоставлять более точную информацию о местоположении.

Законным вариантом использования, когда такого рода информация была бы необходима, является, например, веб-сайт доставки еды или веб-сайт такси. Однако конфиденциальность становится проблемой, когда веб-сайты запрашивают эту информацию без законной причины для запроса такой информации. Например, иногда веб-сайту требуется только географическое положение по отношению к стране происхождения, но некоторые «сверхпривилегированные» веб-сайты вместо получения этой информации из IP-адреса, что, кстати, гораздо менее точно и более чем соответствует требованиям в этом пример использования — настаивайте на знании точного местоположения вплоть до уровня улицы через API геолокации — это важный момент.

Другими словами, веб-разработчики, как правило, должны стремиться использовать приблизительное местоположение и прибегать к точному местоположению только тогда, когда в этом есть оправданная необходимость. Приблизительное отслеживание местоположения — это подмножество отслеживания местоположения, в котором приблизительное местоположение актива ( в радиусе 30 км ) достаточно для требований варианта использования. Напротив, точное отслеживание местоположения почти всегда точно. В лучшем случае он может определить, где вы находитесь, с точностью до метра.

Кроме того, разработчики веб-сайтов должны запрашивать информацию о местоположении только тогда, когда это необходимо для текущей задачи, а затем использовать информацию о местоположении для задачи, для которой она была им предоставлена. И, наконец, информация о местоположении должна быть удалена разработчиком после завершения этой задачи. Кроме того, если такую ​​информацию необходимо сохранить, она должна быть ясно и заметно раскрыта конечному пользователю. Затем разработчик должен ответственно хранить эту информацию, шифруя такие данные. По истечении указанных сроков хранения информация о местоположении должна быть удалена из хранилищ данных разработчиков.

Даже если разработчик использует лучшие практики, опубликованные W3C, прогнозирование или предотвращение некоторых ситуаций по своей сути проблематично из-за того, как создается API. [ 2 ]

  1. Разрешение пользователя запрашивается только один раз, и нет возможности отозвать разрешение пользователя и очистить данные о местоположении пользователя, если пользователь передумает.
  2. Очень легко нажать «разрешить» и непреднамеренно разрешить доступ. И как только пользователь нажимает «разрешить», отправляется информация о точном местоположении его широты и долготы. Учитывая конфиденциальный характер этой информации, не было бы лучше, если бы в API был пункт «Вы уверены?» диалог подтверждения? На момент написания такого контроля не было.
  3. API геолокации использует модель разрешений для каждого домена вместо модели разрешений для каждой страницы. Так, например, пользователь не может разрешить доступ к геолокации только веб-странице, скажем, site.com/map.html , и запретить другой веб-странице в том же домене site.com/mail.html доступ к геолокации.
  4. Веб-сайт и пользователь не могут снижать точность геолокации при запросе или доставке.
  5. Включение VPN не будет маскировать геолокацию, полученную из веб-API. Только IP изменится с VPN.
  1. Отключите геолокацию вообще в браузере. Отключение геолокации является наиболее ограничительным вариантом, так как оно включает полный запрет на запросы геолокации. Однако, если это слишком ограничивает ваш вариант использования, вы можете выбрать вариант 2.
  2. Отключение геолокации в Chrome
Геолокация жесткого кода в Chrome -1
Геолокация жесткого кода в Chrome -2

3. Примите обдуманное и сознательное решение разрешить доступ к веб-сайту только в том случае, если это оправдано и существует допустимый вариант использования. Легко случайно выбрать неверный вариант. Получив разрешение, браузер может отправить геоинформацию на сервер.

Имейте в виду и прочитайте, прежде чем предоставлять доступ (нет возможности «отменить» это)

Следующий код автора можно использовать для экспериментов с HTML5 GEO API, и он настоятельно рекомендуется. Пожалуйста, найдите код на GitHub автора. [ 3 ]

Клиентский jQuery получает информацию о геолокации из браузера.

<!DOCTYPE html>
<html>
<head><title> -=Geo Information-=</title></head>
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  
<body onload="getLocation()">
<h1> -=Geo Information-= </h1>
  
<p id="error"></p>
  
<p id="ip"></p>
<p id="lat"></p>
<p id="lon"></p>

<script>
var ret_ip;
var x = document.getElementById("error");

var q = document.getElementById("ip");
var y = document.getElementById("lat");
var z = document.getElementById("lon");



$(function() {
    $.getJSON("https://api.ipify.org?format=jsonp&callback=?",
      function(json) {
      
           q.innerHTML = "Your IP:  " + json.ip;
           ret_ip=json.ip;
      
      }
    );
  });

var x = document.getElementById("error");

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
  } else { 
    x.innerHTML = "Geolocation Not Available";
  }
}
  
function showPosition(position) 
{
var a=position.coords.latitude;
var b=position.coords.longitude;

  
$(document).ready(function()
{ 
   
    y.innerHTML =  "Your Latitude :  " + position.coords.latitude;
    z.innerHTML =  "Your Longitude:  " + position.coords.longitude;
       
    $.post("/", {ip: ret_ip, lat: a, lon: b },);
 
});
}
   
</script>
<!--<a href="/booking.html">Query</a> -->
</body>
</html>

Надеюсь, этот сценарий показывает, как несоответствующий требованиям веб-разработчик может собирать эту информацию и теоретически передавать эту информацию кому угодно.

Node.JS на стороне сервера, который получает запрос POST и обновляет базу данных.

const express = require("express");
const app = express();
const router = express.Router();
var bodyParser = require('body-parser');
const sqlite3 = require('sqlite3').verbose();

let db = new sqlite3.Database('./db/geo.db');
var ip;
var lat;
var lon;

app.use(express.static("public"));
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

router.get('/index.html', (req, res) => 
{

})

app.post('/', function(req, res)
{
 
  let gip = ""; 
  let glat = "";
  let glon = "";
  
  gip = JSON.stringify(req.body.ip);
  glat = JSON.stringify(req.body.lat);
  glon = JSON.stringify(req.body.lon);
  
  
  let myObj = {   
    geoip: gip,
    geolat: glat,
    geolon: glon,
    
  };
  
    var insertQuery = 'INSERT INTO GEO (IP,LAT,LON) VALUES (:geoip,:geolat,:geolon)';
    db.run(insertQuery , [myObj.geoip,myObj.geolat,myObj.geolon], (err) => {
   if(err) return;
  
  
  });   
      
});
    
//Listening
const listener = app.listen(process.env.PORT, function() {
  console.log("Your app is listening on port " + listener.address().port);
});

      
                
Using the Great Pyramid of Giza GPS Coordinates
Overriding Geolocation information — with The Great Pyramid of Giza GPS Coordinates

Многие люди удивлены тем, что карты Google и подобные веб-сайты могут точно предсказать их местоположение, даже когда VPN активен. Представьте, что вы включили местоположение VPN в какое-то экзотическое место, а затем открыли карты Google, чтобы увидеть, что местоположение не изменилось. Вместо этого он показывает, где вы находитесь с высокой точностью!

Виновником здесь является API геолокации, который по замыслу выдает свое местоположение на основе GPS и других имеющихся в его распоряжении датчиков. Географическое местоположение, полученное с помощью JavaScript, как и в случае с Geolocation API, часто является очень точным, что может быть нарушением вашей конфиденциальности.

С помощью этой информации автор надеется, что вопрос геолокации можно будет понять и смягчить в каждом конкретном случае в зависимости от рассматриваемого варианта использования. Как упоминалось ранее, можно заблокировать все вызовы геолокации, используя соответствующие настройки в браузере или жестко запрограммировав набор GPS-координат по усмотрению конечного пользователя. Существуют также расширения для браузера, которые могут сделать это для конечного пользователя. Location Guard — одно из таких расширений, доступное для Firefox и Chrome.

Location Guard защищает от геолокации на основе JavaScript (которая имеет очень высокую точность), а НЕ от геолокации на основе IP (которая обычно имеет низкую точность). В последнем случае используйте VPN.[ 4 ]

использованная литература

  1. https://www.w3.org/TR/geolocation/#privacy
  2. https://www.researchgate.net/publication/299466959_Exploring_and_mitigating_privacy_threats_of_HTML5_geolocation_API
  3. https://github.com/rajanikanth-sugumar/
  4. https://chrome.google.com/webstore/detail/location-guard/cfohepagpmnodfdmjliccbbigdkfcgia?hl=en
  5. API геолокации — веб-API | MDN (mozilla.org)
  6. https://dev.w3.org/geo/api/test-suite/
  7. https://www.wigle.net/
  8. https://en.wikipedia.org/wiki/Wi-Fi_positioning_system