Юзер агент узнать: Узнать свой User Agent, User Agent Детектор

Отслеживание параметров браузера и ОС пользователя как мера предотвращения угона аккаунтов (обновлено) / Хабр

Уважаемые Хабровчане! Вчерашний вариант статьи я полагал, что находится в черновиках. И посему отобразился недописанным. Предлагаю полную, дописанную версию

Многие он-лайн сервисы стремятся обезопасить аккаунты своих пользователей самыми различными способами. Кто-то отслеживает IP-адрес, сбрасывая кукисы при его изменении (так происходит на Секлабе; вКонтакте просто просит подтвердить последние 4 цифры мобильника). У кого-то сессия живёт ограниченное время, заставляя пользователя авторизоваться снова и снова. У этих способов есть свои достоинства и недостатки. Но какой бы из механизмов не использовался, отслеживание параметров браузера и ОС пользователя придаст дополнительную защиту от угона аккаунтов (как дополнительная защита, но ни в коем случае не основная). И очень странно, что я до сих пор не смог встретить ни одного сервиса, поддерживающего этот механизм защиты.

Задайтесь вопросом: в каких случаях при очередном посещении ресурса у пользователя кукисы будут аналогичны прошлому посещению, но изменятся данные браузера и используемой ОС (которые можно выцепить из User-Agent)? Только в 3-х случаях:

1. Пользователь авторизовался с разных компьютеров (например, дома и на работе) и по некоторым причинам использует разные браузеры.
2. Пользователь авторизовался с 1 компьютера в разных браузерах (этим будут страдать, пожалуй, только веб-разработчики и особо любопытные). Либо те, кто загаживает ОС непонятными фенечками (привет любителям vkSaver)
3. У пользователя угнали сессию.

Детектить предлагается не весь параметр User-Agent, а тип браузера (IE, FF, Chrome, Safari и т.д.) и операционную систему (Windows, Linux, MacOS). Это решит проблемы ложного срабатывания при обновлении ПО на компе пользователя.

Да, User-Agent можно подменять. Но:
1. Довольно часто с этим никто из угонщиков сессии не парится.


2. Подмену User-Agent можно определить (читайте ниже как).

Рассмотрим предлагаемый метод защиты в дополнение к имеющимся. В совокупности с классическими случаями угона сессии.

Отслеживание изменения IP адреса

Это хорошая практика. Но не поможет, если у пользователя нету мозгов хватило ума заходить на свой аккаунт через беспроводную сеть, где его сессию и прослушали. Либо он стал жертвой атаки «человек посередине» от злоумышленника, находящегося в одной подсети с ним у провайдера (не смейтесь, случай хоть и бородатый, но всё ещё частенько встречающийся). Скорее всего, злоумышленник не будет париться с изменением User-Agent. На то мы и рассчитываем. В итоге, доп защита срабатывает.

Сессия живёт ограниченное время

Ну мало того, что это неудобно для пользователя (часто авторизоваться). Так ещё и ситуация абсолютно аналогична предыдущей. И опять же: изменение User-Agent может быть чётким сигналом попытки угона сессии.

А что делать тем, кто всё-таки пользуется разными браузерами дома и на работе?

Как вариант, можно одну из переменных cookies генерить на основа User-Agent. Т.к. злоумышленники довольно часто копируют себе все cookies сервера без разбора, то тут-то они и попалятся, скопировав себе и переменную, привязанную для другого User-Agent.

«Ну, подменить User-Agent труда не составит, с этим только
школота недостаточно опытные взломщики не справятся»,

— скажет тут кто-то их посетителей.

Действительно, кому нужно — тот сможет подменить. Но на помощь приходит интересный способ определения браузера через javascript. Метод очень действенный, сам проверял.

Хотя, и этот способ можно обойти: т.к. javascript выполняется в браузере, на стороне пользователя (потенциального злоумышленника), то мы можем контролировать его выполнение и, тем самым, обойти проверку (Firebug как один из вариантов). Но об этом нужно чётко знать. К тому же, обфусцированность скрипта сильно затруднит задачу.

golang — Проверка user-agent — Stack Overflow на русском

Возникла необходимость проверить, откуда пользователь делает запрос, чтобы определить, каким способом дать ему ответ(дать html в браезер или JSON в, например, curl). Знаю, что html можно дать и в curl, но это будет неудобоваримо.

Погуглив, узнал, что нет какого-то «железного» способа определить, делается ли запрос из браузера. Но есть некая закономерность в юзерагентах браузеров. Написал мини-функцию и хочу спросить мнения, является ли она хоть сколь-либо надежной, для определения пришел пользователь из браузера или нет и почитать мнение, как можно надежнее определить это. Вот функция:

func GetRequest(w http.ResponseWriter, r *http.Request) {
    ua := r.Header.Get("User-Agent")
    switch true {
    case strings.Contains(ua, "Mozilla"):
        w.Write([]byte("Browser" + "\n"))
        return
    case strings.Contains(ua, "Gecko"):
        w. Write([]byte("Browser" + "\n"))
        return
    default:
        w.Write([]byte("Rest quester" + "\n"))
    }
}

Добавил еще такой кейс

case strings.Contains(ua, "Opera"):
        w.Write([]byte("Browser" + "\n"))
        return
  • golang
  • useragent

Я думаю, что Ваш подход очень необычен. А что если я в curl хочу получать текст? Или в браузере получать данные в виде json? Но человечество нашло выход.

Самый простой и наивный способ — кодировать тип желаемого результата в самом запросе. Ведь если url/uri содержит index.html, то очевидно, что хотят получить текст в виде html, а если там data.json, то явно не xml ожидают. Этот подход очень «нативный» и «ожидаемый».

Второй способ — клиент явно декларирует в запросе, что он хочет использует для этого заголовок Accept: text/plain (или что именно нужно)

[зачеркнуто] Content-Type может быть не только в ответе, а и в запросе. Вот есть пример https://stackoverflow.com/questions/56722602/golang-http-server-return-html-or-json-depending-on-content-type [/зачеркнуто]

7

Попробуйте использовать существующие пакеты для парсинга User-Agent, например https://github.

com/mileusna/useragent, https://github.com/mssola/user_agent или https://github.com/ua-parser/uap-go. Данные пакеты позволяют определить тип браузера, операционную систему, тип устройства и т.д.

Вот пример с перехватом четрыех браузеров (в пакете доступно больше):

package main
import (
    "github.com/mileusna/useragent"
    "log"
    "net/http"
)
func GetRequest(w http.ResponseWriter, r *http.Request) {
    useragent := r.Header.Get("User-Agent")
    parsed := ua.Parse(useragent)
    if parsed.Name == ua.Chrome || parsed.Name == ua.Opera || parsed.Name ==ua.Firefox || parsed.Name == ua.Safari {
        // вернуть HTML
    } else {
        // вернуть JSON
    }
}
func main() {
    http.HandleFunc("/", GetRequest)
    log.Fatal(http.ListenAndServe(":8000", nil))
}

В можете перечислить в if все браузеры, которые заданны в данном пакете. Таким образом вы покроете абсолютное большинство запросов (за исключением кастомных браузеров).

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Что такое мой пользовательский агент :: WebBrowserTools

Реклама

О

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

Введите строку пользователя-агента

Метод

[Нормальный] Навигатор. Управляющий [агрессивный] Navigator.Useragent [агрессивный] навигатор. appВерсия

Описание

Этот веб-сайт использует несколько инновационных методов для агрессивного обнаружения реального пользовательского агента, который предоставляет ваш браузер. Просто выберите нужный метод из раскрывающегося списка «Метод» и просмотрите соответствующую строку пользовательского агента в таблице ниже. Результаты обрабатываются с помощью трех разных библиотек синтаксических анализаторов строк пользовательского агента (на отдельных вкладках). Щелкните нужную вкладку, чтобы просмотреть подробную информацию о строке пользовательского агента. Также обратите внимание, что если вы используете расширение для спуфинга пользовательского агента, наши различные механизмы обнаружения попытаются обойти спуфинг и раскрыть настоящую строку пользовательского агента.

Методы:

  1. [обычный] navigator.userAgent : Этот метод считывает объект навигатора после завершения загрузки страницы. Это наиболее распространенный метод определения фактической строки пользовательского агента пользователя.
  2. [агрессивный] navigator.userAgent : Этот метод клонирует объект «навигатор» точно перед тем, как страница будет отображаться, чтобы предотвратить его изменение любыми внешними скриптами позже. Обойти этот метод довольно сложно, так как спуфер не имеет достаточно времени, чтобы асинхронно получить поддельную строку пользовательского агента в этот момент.
  3. [агрессивный] navigator.appVersion : этот метод использует свойство «appVersion» и преобразует его в фактическую строку пользовательского агента в браузерах на основе Chromium. Поскольку Firefox не поддерживает этот метод, он недоступен для этого браузера.
  4. [агрессивный] Заголовок UA : этот метод наблюдает за заголовками запросов, которые отправляются из вашего браузера, и считывает заголовок «агент пользователя» запроса. Обычно веб-страницы не имеют доступа к этой информации, однако, зарегистрировав сервис-воркер, можно отслеживать исходящий трафик с веб-страницы.
  5. [агрессивный] iframe navigator.userAgent : То же, что и метод 2, но использует только что созданный iframe в песочнице, чтобы любой скрипт не мог манипулировать объектом «навигатор».
  6. [агрессивный] iframe navigator.appVersion : То же, что и метод 5, вместо этого используется свойство appVersion.

Ссылка на API:

Вы можете использовать следующие аргументы URL для настройки отображения страницы. Обратите внимание, что эта страница локально сохраняет последний использованный метод и последнюю посещенную вкладку локально для последующего использования.
  1. метод : может быть одним из значений «ug», «ua», «av», «uah», «fua», «fav», который указывает метод по умолчанию, используемый для обнаружения строки пользовательского агента.
  2. вкладка : может быть одним из «navigator», «ua_praser», «platform_js», который указывает механизм рендеринга по умолчанию, который используется для отображения результатов.
  3. verbose : может быть одним из значений «true» или «false», которое указывает, использует ли страница все методы или только активный. Если используются все методы и есть несоответствия в результатах, то пользователь будет предупрежден.

Технические примечания о UserAgent

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

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

  1. а. Одним из способов использования пользовательского агента браузера является предоставление доступа к различным веб-страницам в различных веб-браузерах. Это весьма полезно, потому что он обслуживает самые простые веб-страницы для старых браузеров. Например, вы можете столкнуться с сообщением «Откройте это с помощью Internet Explorer».
  2. б. Отображать различное содержимое для разных операционных систем. Примером этого является мобильная версия веб-страниц на устройствах; обычно уменьшены и организованы вертикально для удобства пользователя.
  3. в. Пользовательские агенты браузера способствуют сбору статистики, которая показывает, как используется операционная система и браузеры. Большинство статистических данных о доле рынка браузеров получаются с помощью одного и того же метода.
  4. д. Пользовательские агенты также используются ботами, сканирующими веб-страницы. Веб-серверы предоставляют ботам специальные процедуры и проверки, такие как обязательная регистрация, экраны и т. д. Веб-серверы также предназначены для отдачи приказов либо определенным ботам, либо всем ботам в зависимости от их программирования; с помощью файла robots.txt. Например, мы смотрим на веб-сервер, запрашивающий определенного бота не входить и не выходить, или разрешить другому боту доступ только к частям сайта. Боты обычно идентифицируются по строкам пользовательского агента.

Мы знаем, что NCSA Mosaic был одним из первых браузеров с доступом в Интернет. Строка пользовательского агента, которая была связана с ним, была Mosaic/2. 0, которая позже была передана Mozilla, чей пользовательский агент был Mozilla/1.0. Mozilla была значительно более продвинутой с точки зрения подключения и безопасности, чем Mosaic, из-за простоты поддерживаемых фреймов. Веб-серверы включились, чтобы наблюдать за пользовательским агентом Mozilla и за тем, как он отправляет страницы, состоящие из фреймов, через браузеры Mozilla. Это было замечательным достижением, учитывая, что другие браузеры использовали отправку старых страниц вообще без фреймов. Далее мы познакомились с Internet Explorer с поддерживаемыми фреймами. Тем не менее, веб-страницы с фреймами по-прежнему не получались, потому что ими просто делились браузеры Mozilla.

Похожие сообщения в блоге

  1. Проблемы с защитой от отслеживания в браузерах : Команда бельгийских исследователей из KU проанализировала политики 7 основных веб-браузеров в отношении файлов cookie, 14 расширений для защиты от отслеживания и 31 блокировщика рекламы. Левен. Они обнаружили мелкие и серьезные проблемы со всеми из них. ..
  2. Эффективность контрмер : Обычный метод, который используется организациями и веб-сайтами, — это снятие отпечатков пальцев. Это делается либо самостоятельно, либо с помощью дополнительного метода для идентификации и отслеживания пользователей Интернета…
Комментарии и отзывы

Мы используем файлы cookie, чтобы улучшить ваш опыт. Продолжая посещать этот сайт, вы соглашаетесь на использование нами файлов cookie. Подробнее

Navigator userAgent Property

❮ Предыдущий ❮ Справочник по объектам навигатора Далее ❯

Пример

Получить navigator.userAgent:

let agent = navigator.userAgent;

Попробуйте сами »

Другие примеры «Попробуйте сами» ниже.


Определение и использование

свойство userAgent возвращает заголовок пользовательского агента, отправленный браузер на сервер.

Свойство userAgent доступно только для чтения.

Возвращаемое значение содержит информацию об имени браузера, версии и платформе.

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


Синтаксис

navigator.userAgent

Возвращаемое значение

Тип Описание
Строка Заголовок пользовательского агента браузера.


Дополнительные примеры

Показать все свойства навигатора:

let text = «

Кодовое имя браузера: » + navigator.appCodeName + «

» +
«

Имя браузера: » + navigator .appName + «

» +
«

Версия браузера: » + navigator.appVersion + «

» +
«

Файлы cookie включены: » + navigator.cookieEnabled + «

» +
«

Язык браузера: » + navigator.language + «

» +
«

Браузер онлайн: » + navigator.onLine + «

» +
«

Платформа: » + navigator. platform + «

» +
«

Заголовок агента пользователя: » + navigator.userAgent + »

«;

Попробуйте сами »


Поддержка браузеров

navigator.userAgent поддерживается во всех браузерах:

Хром ИЭ Край Фаерфокс Сафари Опера
Да Да Да Да Да Да

❮ Предыдущий ❮ Справочник по объектам навигатора Следующий ❯


ВЫБОР ЦВЕТА



Лучшие учебники
Учебное пособие по HTML
Учебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебное пособие по SQL
Учебное пособие по Python
Учебное пособие по W3. CSS
Учебное пособие по Bootstrap
Учебное пособие по PHP
Учебное пособие по Java
Учебное пособие по C++
Учебное пособие по jQuery

900 900 Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery

Основные примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery

FORUM | О

W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *