Компания 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.
Комментарии (32)
dom1n1k
05.11.2016 02:28Склоняюсь ко мнению, что они поступили правильно.
Хотя, как вариант, можно было бы спрятать за флагом.
mcflys
05.11.2016 03:20+6Была же история, по моему про Uber. Они просили больше денег за проезд когда у пользователя разрежался телефон.
ArjLover
05.11.2016 03:37+8Это была злобная фантазия тех же журналистов на данную тему, и вот реально как в анекдоте — ложечки нашлись, а осадок остался — уберу уже досталось на орехи.
JeStoneDev
05.11.2016 05:11+4У сайта не должно быть возможности связать личность пользователя в режиме инкогнито с разным IP с VPN и без него. В случае быстрого отключения VPN, уровень заряда аккумулятора будет примерно одинаковым. Считав эту информацию, браузер передаст ее сайту. Два набора данных будут сопоставлены и можно будет сделать вывод, что пользователь один и тот же.
Странное решение. Мне кажется было бы разумнее запрашивать у пользователя разрешение на использование Battery Status API, а не удалять его полностью. А то следуя этой логике они должны вообще никогда не реализовывать ни одну из спецификаций сенсоров:
Gyroscope Sensor
Proximity Sensor
Ambient Light Sensor
Magnetometer Sensor
Generic Sensor API
и кучу других спецификаций, дающих хоть какую-то информацию об устройстве, geolocation, mediastream, bluetooth (это я уже утрирую).
По ним ведь тоже в совокупности (да и по отдельности) можно делать определенные выводы о личности пользователя при отключении/смене VPN. Только вот в большинстве случаев (или во всех?), когда нужен доступ к каким-то дополнительным устройствам, то запрашивается (и скорее всего будет запрашиваться для нереализованных спецификаций) разрешение пользователя.
Так чем же Battery Status API отличается от обычного «сенсора уровня батареи»?
Ivan_83
05.11.2016 06:09-1Это далеко не всё.
1. Коммитеров мозиллы скорее всего приватность вообще не беспокоит, поскольку для фигнерпритнта при включённой жаве данных предостаточно.
Вот тут это всё подробно показывают: https://panopticlick.eff.org
АПИ батарейки это сущие мелочи.
Для начала нужно выпиливать джаву, потом рандомизировать оставшиеся заголовки или их тоже выпиливать.
Всё это приведёт нас обратно лет на 15 назад.
NoScript и регвестполиси сильно помогают против таких всевидящих скриптов, но полностью проблемы не решают и сложны в пользовании для обычных людей.
Те решения проблемы приватности для обычных людей нет.
2. Скорее всего коммитеры таки пострадали от убера и прочих которые при низком заряде поднимают ценник в разы на такси и потому начали шевелится, оправдывая мстю заботой о приватности. Либо пеар.
Я вообще стал сильно сомневаться в их стремлении к лучшему для пользователя и аполитичности, после того как увидел что патч к NSS (это их самодельная криптолиба для браузера и пр их софта) для поддержки российской крипты висит у них в багтрекере уже года 3+.FForth
06.11.2016 00:09По тесту https://panopticlick.eff.org В FireFox только установленный AdBlock отработал (из четырёх)
В NetSurf ещё и тест «Is your browser blocking invisible trackers?»
В Chromium четыре теста провалились (но там даже не установлен и AdBloks)
Barafu
05.11.2016 09:19+3Это бред какой-то. Ну оставили бы 2 значения "экономить надо" и "экономить ненадо" — даже не показывает, а есть ли вообще батарея. И всё работает.
Нет, вместо этого им надо вырезать API целиком (а кто из сайтов не обновится — вообще работать не будет что ли?). Кто обновится — тот, понятно, будет жать на всю, а не в эконом-режиме.
Mozilla как она есть — так о нас заботится, что не знаешь, куда спрятаться. Думаю, этот экстремизм не в последнюю очередь обеспечил победу Хрома.A-Stahl
05.11.2016 11:27+5Во-первых хром не победил.
Во-вторых… блин, какого чёрта браузер вообще что-то знает о батарее? Может ещё и количество свободного места на винтах пусть докладывает? Или рутовый пароль сообщает чтобы сайтам было легче… ну легче чтобы было… сайтам.Murmurianez
05.11.2016 13:17-1Хром не победил? Были времена, хоть и не долго, когда Firefox занимал лидирующие позиции и, насколько я помню, из-за прихода Хрома всё это и обрушилось.
По-поводу батареи — в статье расписали реальный кейс — соц сети отключают автовоспроизведение и всякие рюшечки. И пусть все сайты так не делают, но когда главные игроки занимаются такой оптимизацией — это даёт результаты для многих пользователей.A-Stahl
05.11.2016 13:29+4>соц сети отключают автовоспроизведение и всякие рюшечки
Это должно делаться где-то в настройках. Сайта(убрать свистелки) или браузера (бессвистелочный режим).
Murmurianez
05.11.2016 17:31Только для случая «принудительно включить» — не заставляйте пользователя думать — он ждёт готового оптимального решения.
daggert
05.11.2016 17:57+1Именно так подумали китайские погромисты и влепили принудительный заход на ru.aliexpress для всех кто на русском айпи…
MnogoBukv
06.11.2016 00:29Кого там хром победил? И чем? Тем что нельзя выбрать никаких настроек при установке? Тем что он свои иконки распихивает во все дыры? Или тем что ему нельзя указать на прокси сервер, кроме как прописав его в интернет експлорере? Кривая поделка.
Murmurianez
06.11.2016 21:29Настройки при установке нужны 0.001% пользователей. А победил он массовостью. Каким бы Firefox или другие браузеры хорошими бы не были — это факт. Мне вот Yandex.Browser больше всего нравится.
MnogoBukv
08.11.2016 22:32Мурашки по спине, когда слова «яндекс» и «браузер» стоят так близко друг к другу. Осталось написать что яндекс выиграл у гугла в поисковом движке, и можно занавес опускать.
Murmurianez
08.11.2016 22:53А Вы пробовали? Он очень хорошо проработан по юзабилити.
MnogoBukv
08.11.2016 23:34+1Скачал 500кб, запустил, не пашет, но хоть дал нормальную ссылку на полный инсталлер, скачал ещё 60 метров, установил (кстати, когда снимаешь галочки «сделать по умолчанию» он пытается достучаться до некоего clck.yandex.ru, не может, и подвисает секунд на 5), в общем, запустил, та же самая проблема, что и с хромом. Он не видит инета, т.к. некуда прокси прописать. Придётся сносить.
MnogoBukv
08.11.2016 23:40+1Госпаде, он ещё и иконку в квикланч налепил через отдельную программу «yandex taskbar button», которую надо отдельно сносить. О чём мы говорим вообще?
Shatun
05.11.2016 13:17Mozilla как она есть — так о нас заботится, что не знаешь, куда спрятаться. Думаю, этот экстремизм не в последнюю очередь обеспечил победу Хрома.
Противопаставлять «экстремиму фаерфокса» хром, который со своей «заботой» отключил не так давно NPAPI котрое существовало лет до 20 хрома, было во всех браузерах и через которое работало огромная куча дполнений?
RybinDen
05.11.2016 13:17+2Сделали бы чтобы в приватном режиме отключалось, а в обычном работало. Решили просто удалить проблему, а не решать ее.
FAN2tom
05.11.2016 13:17-3Решение есть! Садится батарея — пользуйся Opera и Google Chrome, не садится — Firefox. Так убиваются 2 зайца сразу — решается проблема с прожорливостью сайтов и повышается анонимность.
zooks
05.11.2016 14:39Сомневаюсь, что данная функция была полезна. Существуют популярные сайты, которые своими скриптами вызывают зависание даже на ПК, чего уж говорить про оптимизацию для меньшего разсхода батареи.
tundrawolf_kiba
09.11.2016 16:33Кстати, вчера в блоге Яндекс.Браузера тоже подсуетились, и напомнили, что у них эту опцию сделали отключаемой и по-умолчанию отключенной(видимо в одном из последних обновлений, т.к. раньше этого переключателя не видел).
Magister7
Хм, а не лучше ли было бы отдавать просто некие «усредненные» данные? Например, округлять уровень заряда до 20%. Ну и со временем что-то похожее сделать.
Тогда бы функция приносила пользу, но использовать её для слежения было бы невозможно.
lgorSL
В идеале, там достаточно 2 положений: "экономить энергию" и "не экономить" — а пользователь сам решит, когда и что нужно.
Zibx
Проще — отдавать рэндом в режиме инкогнито! Причём это касается и данных гироскопа\геопозиционирования\может существует вайфай апи с именем точки\хттп агент\скринв\х — всё это рэндомить, это же очевидное решение.
Fedcomp
Ну и сайты у вас тогда будут рандомить, которые используют эту функцию для полезных действий.
evehicks
Сомневаюсь что усреднение как-то добавит анонимности в описанном примере с быстрым отключением VPN.
MnogoBukv
В данном примере — анонимность не является примером анонимности.