Pull to refresh

Из Firefox 52 удалят API уровня заряда аккумулятора для сохранения приватности пользовательских данных

Reading time 4 min
Views 15K


Компания Mozilla заблокирует доступ к одной из функций браузера Firefox, известной как Battery Status API. С ее помощью веб-сайты могли узнавать об уровне заряда батареи ноутбука, планшета или смартфона пользователя. Решение было принято с целью обезопасить право пользователей на приватность. Хронология событий такова, что история началась с подозрений экспертов, за ними последовала реализация и реальное использование. На данный момент не ясно, что будут делать с этой функцией остальные браузеры.

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

Цель функции — предлагать пользователям разные версии сайта в зависимости от остатка заряда устройства. Если устройство разряжается, пользователю можно предложить версию сайта, которая не так сильно «ест» батарейку. За разными версиями стоит большая работа владельцев и авторов сайтов, разработчиков и прочих. Battery Status API получала статус зарядки от сети или работы от батарей и том, сколько времени осталось до отключения устройства. А также, какой процент батареи остался неизрасходованным. Конкретное применение функции выглядело так: социальные сети отключали автоматическое воспроизведение видео, а сервисы с картами отображали меньше деталей, без которых можно было обойтись.


Потенциальная угроза стала реальностью, когда два исследователя безопасности из Принстонского Университета обнаружили скрипты слежения, которые использовались в реальном мире для функции fingerprint с конкретного устройства с целью дальнейшего слежения за ним в разных ситуациях. Это открытие мотивировало разработчиков компании Mozilla на удаление «нехорошей» возможности из своего браузера. Окончательно функция была убрана 27 октября 2016-го года. С момента обнаружения проблемы прошло 17 месяцев.

Кроме Firefox еще два браузера поддерживали функцию: Opera и Google Chrome. Пусть Battery Status API является частью спецификации HTML5, браузеры IE, Edge никогда не реализовывали ее. В WebKit поддержка Battery Status API была, но в браузере Safari она никогда не появлялась. Существует лишь несколько общевозможных применений в реальности за рамками задачи идентификации пользователя.



О самой функции


Battery Status API была задокументирована в 2012-м году. Mozilla Firefox первый браузер, в котором она была реализована. Battery status API добавляет в window.navigator метод navigator.getBattery(). В примере ниже видно, как изменяется статус зарядки (подключение к сети) и уровень заряда в батарее, и оставшееся время. Это возможно с применением функции listen для событий: chargingchange, levelchange, chargingtimechange, dischargingtimechange.

navigator.getBattery().then(function(battery) {
  function updateAllBatteryInfo(){
    updateChargeInfo();
    updateLevelInfo();
    updateChargingInfo();
    updateDischargingInfo();
  }
  updateAllBatteryInfo();

  battery.addEventListener('chargingchange', function(){
    updateChargeInfo();
  });
  function updateChargeInfo(){
    console.log("Battery charging? "
                + (battery.charging ? "Yes" : "No"));
  }

  battery.addEventListener('levelchange', function(){
    updateLevelInfo();
  });
  function updateLevelInfo(){
    console.log("Battery level: "
                + battery.level * 100 + "%");
  }

  battery.addEventListener('chargingtimechange', function(){
    updateChargingInfo();
  });
  function updateChargingInfo(){
    console.log("Battery charging time: "
                 + battery.chargingTime + " seconds");
  }

  battery.addEventListener('dischargingtimechange', function(){
    updateDischargingInfo();
  });
  function updateDischargingInfo(){
    console.log("Battery discharging time: "
                 + battery.dischargingTime + " seconds");
  }

});

У сайта не должно быть возможности связать личность пользователя в режиме инкогнито с разным IP с VPN и без него. В случае быстрого отключения VPN, уровень заряда аккумулятора будет примерно одинаковым. Считав эту информацию, браузер передаст ее сайту. Два набора данных будут сопоставлены и можно будет сделать вывод, что пользователь один и тот же.


Guardian приводит слова Лукаша Олейника, консультанта по безопасности и исследователя в UCL, по поводу происходящего с Firefox. Он был одним из четырех людей, первыми обнаруживших потенциальную угрозу Battery Status API. Конечно, он был рад, увидеть как его работа принесла плоды. Специалист не ожидал, что компания-разработчик полностью откажется от использования API. «Это и правда беспрецендентно. Я не знаю о подобном развитии событий за всю историю разработки. Насчет отсрочки в процессе удаления: это не так уж критично, потому что мы предлагали внести изменения в работу функции в прошлом году, а в итоге получили полное удаление. Факт, что это происходит для соблюдения конфиденциальности, подчеркивает важность принятого решения». В своем заявлении представители Mozilla сказали, что для веб-контента функция теперь недоступна, но ее все еще можно найти в расширениях. Battery Status API удалят в 52-й версии Firefox.

Пока что функцию собралась удалять только Mozilla. Разработчики движка Webkit, который лежит в основе Safari от Apple, также предложили удалить код API. Издание The Guardian обратилось к компаниям Google и Opera за комментариями. Apple от комментариев отказались. Подтверждение о том, что функция удалена из доступа размещено на официальном сайте Mozilla.
Tags:
Hubs:
+30
Comments 32
Comments Comments 32

Articles