Google Analytics сохраняет имя пользователя и пароль как часть URL-адреса.

Контекст проблемы:

Я использую meteor js для мобильного приложения. Я подключил его к вызовам google Analytics и в основном использую два типа вызовов:

  1. Просмотры экрана
  2. События

Просмотры экрана в порядке, но у меня проблема с событиями.

Когда я перехожу к Поведение -> События -> Экраны, на панели управления Google Analytics я вижу URL-адрес каждой страницы, вызвавшей событие, в столбце Имя экрана. . Моя проблема в том, что URL-адреса страниц для моей страницы входа выглядят примерно так:

meteor.local/login?username=*******&password=+++++++&rememberMe=on

Где ******* — фактическое имя пользователя, а +++++++ — соответствующий пароль!


Причина:

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


Подсказки:

ПОДСКАЗКА 1:

Раньше я выполнял http-вызовы GET, но я изменил их все на POST, и это все еще не устранило проблему, поскольку я ожидал, что он больше не будет передавать простые параметры через URL-адрес. .

ПОДСКАЗКА 2:

Я заметил, что фреймворк google Analytics js по умолчанию работает с http, а не с https. Мне было интересно, вызывает ли он сервер аналитики с помощью GET. Если да, то можно ли как-то это изменить?

ПОДСКАЗКА 3:

Вот как я запускаю экземпляр GA:

(function (i, s, o, g, r, a, m) {
    i['GoogleAnalyticsObject'] = r;
    i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
    }, i[r].l = 1 * new Date();
    a = s.createElement(o),
    m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

ga('create', googleKey, 'auto');

ПОДСКАЗКА 4:

Я также заметил, что эти URL-адреса перехватываются очень редко. Например. из 12 500 уникальных событий (всего около 30 000 событий) он захватил только 9 URL-адресов с именем пользователя и паролем. Остальные 12 491 событие

meteor.local/login

OR

meteor.local/--

OR

localhost/--

как экранное имя.

ПОДСКАЗКА 5:

Я также установил 4 "поиска и замены" глобальные фильтры в учетной записи аналитики для поиска этой строки.

метеор.местный/.*

и заменить его на этот

метеор.местный/скрытыйURI

Кажется, это тоже не работает. Я добавил этот фильтр в 4 разных поля (поскольку я до сих пор не знаю, откуда берутся URL-адреса):

  1. Имя хоста
  2. Заголовок страницы
  3. Направления
  4. URI запроса

ПОДСКАЗКА 6:

Вот как я вызываю экземпляр GA для отправки события:

ga('send', 'event', 'button', 'click', eventName);

person MaxFot    schedule 15.04.2016    source источник
comment
Есть ли что-то общее между событиями, передающими пользователя и пароль? возможно, это вызвано флагом rememberMe=on? или люди, приходящие с определенной страницы или ссылающиеся на URL?   -  person Philip Pryde    schedule 15.04.2016
comment
@PhilipPryde Я не думаю, что это флаг rememberMe, потому что я редко вижу эти URL-адреса, а функция Запомнить меня является одной из наиболее широко используемых в этом приложении. Однако все это происходит со страницы входа.   -  person MaxFot    schedule 15.04.2016
comment
Ваши формы должны использовать POST вместо GET для входа в систему. Таким образом, учетные данные для входа не отображаются в URL-адресе.   -  person Mike    schedule 15.04.2016
comment
@Mike Как я уже сказал в Clue1, я уже изменил их все на POST, но это ничего не изменило.   -  person MaxFot    schedule 15.04.2016
comment
@MaxFot Вы не используете POST, если переменные добавляются к URL-адресу ... если вы все еще не просматриваете старые результаты, где параметры были в URL-адресе. В этом случае может помочь эта ссылка: blog.crazyegg.com/2013/03/29/   -  person Mike    schedule 15.04.2016
comment
В качестве временной меры перейдите в настройки просмотра и добавьте имя пользователя и пароль в поле «Исключить параметры запроса URL». Но это действительно то, что нужно исправить на уровне приложения. Это не только брешь в системе безопасности, но и, вполне вероятно, нарушение Условий использования Google (если имя пользователя и пароль не являются данными, позволяющими установить личность, то что именно).   -  person Eike Pierstorff    schedule 16.04.2016
comment
@Mike Спасибо за помощь и предоставленную ссылку. К сожалению, я запускаю метеорное приложение. Это означает, что у меня нет доступа к параметру Исключить параметры запроса URL, который используется в этой ссылке. Поскольку я использую метеор, я фактически компилирую веб-страницу как приложение, поэтому у меня все еще есть URL-адреса.   -  person MaxFot    schedule 18.04.2016
comment
@Mike И я дважды проверил весь свой код, у меня нет ни одного вызова GET!   -  person MaxFot    schedule 18.04.2016
comment
@EikePierstorff Спасибо за комментарий. Как я сказал Майку выше, у меня нет доступа к параметрам запроса «Исключить URL», поскольку я использую Meteor js, и это не отслеживается в аналитике Google как веб-сайт, а как приложение.   -  person MaxFot    schedule 18.04.2016
comment
@MaxFot Forms по умолчанию используют GET. Если вы пропустили параметр method, он будет использовать GET.   -  person Mike    schedule 18.04.2016
comment
@Mike Я не передаю данные через какие-либо формы. Я просто делаю вызов http POST. Я боюсь, что это не фиксируется как часть URL-адреса http-вызова, но Google Analytics сохраняет экранное имя страницы, которая запускает любое событие, и в моем случае (поскольку я использую метеор) экранное имя URL этой страницы, которая содержит имя пользователя и пароль.   -  person MaxFot    schedule 19.04.2016


Ответы (1)


Хорошо. Итак, мне пришлось провести много экспериментов и попробовать разные вещи, чтобы решить эту проблему.

Попробовав все, что я описал в вопросе, я наконец нашел способ решить эту проблему.

Основная причина этой проблемы заключалась в том, что я использовал учетную запись Google Analytics, настроенную для отслеживания приложения, для сбора данных из приложения, созданного с помощью meteor. js (который в основном использует cordova).

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

С другой стороны, Google Analytics просматривает (и фиксирует) экранное имя страницы приложения, когда на этой странице запускается событие. В нативных приложениях это отображаемое имя будет похоже на "О нас", "Свяжитесь с нами", "Дом" и т. д.

Теперь, поскольку приложение метеора не то же самое, имя экрана, возвращаемое метеором, на самом деле является URL-адресом страницы, вызвавшей событие.

Это не имеет никакого отношения к http-вызовам (независимо от того, являются ли они GET или POST), потому что это локальный URL-адрес, используемый метеором для навигации, который передается в Google Analytics, а не HTTP-вызовы.


Решения

1.

Если бы у меня была учетная запись Google Analytics, настроенная как средство отслеживания веб-страницы, у меня был бы доступ к полю «Исключить параметры запроса URL», и я потенциально мог бы исключить имя пользователя и пароль, как было предложено @Mike и @PhilipPryde. в комментариях. Однако мне нужно было использовать набор аналитики Google в качестве трекера приложений. Итак, это не сработало для меня.

Ошибка


2.

Я применил фильтр ко всему представлению в аналитике Google, искал meteor.local/.* и заменил его на hiddenURL. Фильтры на

  • Имя хоста
  • Заголовок страницы
  • Направления
  • URI запроса

не сработало.

Но когда я поставил тот же фильтр на

  • Ярлык экрана

поле, получилось.

Однако это рассматривало только имена экранов, возвращаемые просмотрами экрана, а не событие. Таким образом, это также не решило мою проблему.

Ошибка


Наконец, мне пришлось сделать это:

В экземпляре GA есть вызов метода, который позволяет вам настраивать различные параметры. В итоге я использовал это:

ga('set', 'screenName', 'hiddenURL');

Это изменило имя экрана на «hiddenURL». Итак, я использовал это перед каждым мероприятием, и мне это помогло. Мой код для отправки событий в google analytics выглядел так:

ga('set', 'screenName', 'hiddenURL');
ga('send', 'event', 'button', 'click', eventName);

ПС:

Это изменяет отображаемое имя, которое отображалось в отчетах Google Analytics в режиме реального времени, на «hiddenURL» всякий раз, когда кто-то инициировал событие. Но оно снова меняется на отображаемое имя, как только они переходят на другую страницу. Таким образом, это также не будет мешать каким-либо вашим данным просмотра экрана, поскольку они не фиксируются как просмотр экрана.

Конечно, это потому, что я передаю имя экрана своему экземпляру GA каждый раз, когда отправляю изображение экрана. Так это выглядит так:

sendScreenViewToGA = function (screenName) {
    ga('send', 'screenview', {
        'appName': 'Something',
        'screenName': screenName,
        'appVersion': x.x
    });
}

Если бы я использовал имя экрана, которое сейчас жестко установлено в среде, я бы закончил со всеми моими именами экрана в аналитике, установленными на «hiddenURL».


Я очень надеюсь, что этот пост поможет другим с такими же проблемами и сэкономит им время.

person MaxFot    schedule 20.04.2016
comment
Это был превосходно задокументированный ответ на очень сложную проблему. Спасибо. - person Qoheleth-Tech; 14.03.2019