Отслеживайте местоположения через VPN, используя одну строку JavaScript
Браузеры являются основной точкой соединения между пользователями и их сервисами. Поэтому неудивительно, что для их обеспечения предпринимаются значительные усилия.
Некоторое время назад браузеры выступали за то, чтобы предоставлять разработчикам больше возможностей для создания новых и улучшенных интерфейсов в Интернете. Это мнение изменилось с тех пор, как технологические гиганты стали собирать информацию о пользователях и отслеживать каждое действие, даже через разные веб-сайты.
Это осознание положило начало гонке вооружений между разработчиками API-интерфейсов браузера и разработчиками скриптов отслеживания. С тех пор, чем больше функций и опций у вашего браузера, тем больше у вас возможностей отслеживать каждого пользователя с более высокой степенью детализации.
Одним из простейших методов отслеживания пользователя является хранение данных в файлах cookie или локальном хранилище. Все, что вам нужно сделать, это ввести достаточно большое случайное значение, и пользователь будет однозначно отслежен.
Однако это создает несколько проблем. Например, время ожидания этих данных может истечь и они могут быть удалены после перезапуска браузера или закрытия личных вкладок. Кроме того, в западных странах пользователи должны явно разрешать отслеживание с помощью таких средств, так что это может сделать эти попытки довольно очевидными.
Один из видов отслеживания, который не может выполнить ни один из этих методов, - это отслеживание фактического местоположения пользователей. В настоящее время многие люди не без оснований используют VPN, и они отлично работают, чтобы обеспечить вам немного дополнительной конфиденциальности. Одна из проблем заключается в том, что это может привести к искажению некоторых статистических данных об использовании вашего веб-сайта и затруднить защиту сеансов вашего браузера.
Допустим, вы входите на свой банковский веб-сайт. После входа в систему ваш банк сохраняет ваш IP-адрес и может даже попытаться приблизительно определить ваше местоположение. Внезапно появляется другое соединение с вашим сеансовым токеном, но на этот раз оно с другого конца света. Для этого есть две вероятные причины:
- Ваша учетная запись только что была скомпрометирована
- Вы только что включили VPN, чтобы он отображался из другого места
Что должен делать ваш банк? Запретите этот сеанс и потребуйте, чтобы пользователь снова вошел в систему. Это может сделать VPN гораздо более неудобными для людей в долгосрочной перспективе. Разрешить подключение? Ежегодно от подобных схем страдают десятки тысяч людей, и эта дополнительная мера безопасности могла бы сэкономить им столько времени, забот и денег.
Наличие реальной статистики местоположения пользователя - это кошмар для конфиденциальности, но иногда он может очень помочь. Вот почему я начал копаться в API-интерфейсах браузера и пытался создать гигантскую таблицу всего контента, который они могли бы предоставить разработчикам.
Одной из первых идей была раскладка клавиатуры. Не все раскладки клавиатуры очень полезны при определении местоположения. Почти все разработчики используют макет США по всему миру, но он дает ориентир. Если кто-то вошел в систему, используя немецкую раскладку клавиатуры, и внезапно через две секунды загрузилась другая страница, и у них есть венгерская раскладка, это действительно подозрительно.
В каждый современный браузер встроен API под названием Intl. Это API интернационализации, который предоставляет функции для отображения данных, настроенных с учетом языковых особенностей каждого пользователя. Например, у него есть класс с именем NumberFormat
, который форматирует объекты JavaScript типа Number для отображения в соответствии с местными обычаями.
Intl.NumberFormat().format(3.6) // '3.6' or '3,6'
“Разрешение” этого показателя недостаточно велико, чтобы многое определить о пользователе, поэтому, покопавшись еще немного, я нашел кое-что гораздо более интересное.
timeZone
В современных системах они отказались от того, чтобы люди вводили, например, на сколько часов вы смещены от CET или UTC. Скорее всего, они спрашивают вас о столице вашей страны или близком крупном городе. Эти данные могут быть запрошены браузером и переданы в наш код JavaScript с помощью этой единственной строки:
В нашем случае это возвращает Европу/Будапешт. Это не совсем точно, но вы можете видеть, как с помощью этой единственной информации мы знаем, что наш пользователь находится где-то в окрестностях Будапешта, Венгрия, в Европе. Если их IP-адрес, предоставленный нам, принадлежит небольшой телекоммуникационной компании в США, штат Техас, это может вызвать несколько тревожных сигналов.
Как мы можем использовать эти знания?
Мы подготовили короткую демонстрацию на своем GitHub, чтобы любой желающий мог попробовать: https://github.com/dubniczky/VPN-Detect
Вы можете следовать инструкциям и открыть страницу, затем поиграть и посмотреть, как она пытается предсказать ваше реальное местоположение и используете ли вы VPN в данный момент. Измените свое местоположение и включайте и выключайте VPN, чтобы увидеть реальный эффект.
Лучшие решения проблем, как правило, простые. Это, на самом деле, очень просто.