Google 分析将用户名和密码存储为 url 的一部分
Google analytics stores username and password as a part of url
问题背景:
我正在为移动应用程序使用 meteor js。
我已经将它与 google analytics 调用联系起来,基本上我使用了两种类型的调用:
- 屏幕浏览量
- 事件
屏幕浏览量很好,但我遇到了事件问题。
当我转到 行为 -> 事件 -> 屏幕 时,在 google 分析仪表板中,我可以看到每个页面的 URL已触发 屏幕名称 列下的事件。我的问题是我的登录页面 URLs 看起来像这样:
meteor.local/login?username=*******&password=+++++++&rememberMe=on
其中 ******* 是实际的 用户名,++++++++ 是相应的 密码!
原因:
由于我必须与多人共享此分析帐户,我不希望此信息在此处可用。
线索:
线索 1:
我曾经做过 GET http 调用,但我已经将它们全部更改为 POST 仍然没有修复了这个问题,因为我预计它不再通过 URL 传递普通参数。
线索 2:
我注意到默认的 google 分析 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 偶尔会被捕获。例如。在 pas 的 12,500 个独特事件中(总共约 30,000 个事件),它仅捕获了 9 URLs 的用户名和密码。其余12491个事件有
meteor.local/login
或
meteor.local/--
或
localhost/--
作为屏幕名称。
线索 5:
我还在分析帐户上放置了 4 "search and replace" 全局过滤器 以搜索此字符串
meteor.local/.*
换成这个
meteor.local/concealedURI
这似乎也不起作用。
我在 4 个不同的字段上添加了这个过滤器(因为 我仍然真的不知道 URL 来自哪里 ):
- 主机名
- 页面标题
- 推荐
- 请求 URI
线索 6:
这就是我调用 GA 实例发送事件的方式:
ga('send', 'event', 'button', 'click', eventName);
好的。因此,我不得不 运行 进行大量实验并尝试不同的方法来解决这个问题。
在尝试了我在问题中描述的所有事情后,我终于找到了解决这个问题的方法。
这个问题的主要原因是我使用了一个google分析账户设置来跟踪一个App,从使用 meteor js(基本上使用 cordova)构建的应用程序中捕获数据。
使用流星意味着我的应用程序的屏幕实际上是呈现为移动应用程序的网页。似乎 meteor 使用 URLs 来浏览这些屏幕。
另一方面,当从该页面触发事件时,google 分析会查看(并捕获)应用页面的屏幕名称。在 原生应用程序 中,此屏幕名称类似于 "About us"、"Contact Us"、"Home" 等
现在meteor应用不一样了,meteor返回的网名实际上是触发事件的页面的URL
这与 http 调用没有任何关系(无论它们是 GET 还是 POST),因为它是 meteor 用于导航的本地 URL 被传递下降到 google 分析,而不是任何 http 调用。
解决方案
1.
如果我将 google 分析帐户设置为 网页 跟踪器,我可以访问 "Exclude URL Query Parameters" 字段并且我可能会排除用户名和密码,正如@Mike 和@PhilipPryde 在评论中所建议的那样。
但是,我需要使用 google 分析集作为 app 跟踪器。所以,这对我不起作用。
失败
2.
我确实在 google 分析中对整个 view 进行了筛选,并搜索了 meteor.local/.* 并将其替换为 hiddenURL。
上的过滤器
- 主机名
- 页面标题
- 推荐
- 请求 URI
没用。
但是当我使用相同的过滤器时
- 屏幕标签
字段,它起作用了。
但是,这只查看了屏幕浏览点击返回的屏幕名称,而不是事件。因此,这实际上也没有解决我的问题。
失败
最后,我不得不这样做:
GA 实例上有一个方法调用,可让您设置不同的选项。我最终使用了这个:
ga('set', 'screenName', 'hiddenURL');
这将屏幕名称更改为 "hiddenURL"。所以,我在每次活动前都使用它,它对我很有效。
我将事件发送到 google 分析的代码如下所示:
ga('set', 'screenName', 'hiddenURL');
ga('send', 'event', 'button', 'click', eventName);
PS:
这会将 real-time 分析报告中显示的屏幕名称更改为 "hiddenURL",每当有人触发事件时。但是,一旦他们转到另一个页面,它就会变回屏幕名称。因此,它也不会混淆您的任何屏幕视图数据,因为它没有被捕获为屏幕视图。
当然是因为,每次发送屏幕视图时,我都会将屏幕名称传递给我的 GA 实例。所以它看起来像这样:
sendScreenViewToGA = function (screenName) {
ga('send', 'screenview', {
'appName': 'Something',
'screenName': screenName,
'appVersion': x.x
});
}
如果我使用了现在在环境中设置的屏幕名称,我最终会将分析中的所有屏幕名称设置为 "hiddenURL"。
我真的希望这个 post 能帮助其他有同样问题的人并节省他们一些时间。
问题背景:
我正在为移动应用程序使用 meteor js。 我已经将它与 google analytics 调用联系起来,基本上我使用了两种类型的调用:
- 屏幕浏览量
- 事件
屏幕浏览量很好,但我遇到了事件问题。
当我转到 行为 -> 事件 -> 屏幕 时,在 google 分析仪表板中,我可以看到每个页面的 URL已触发 屏幕名称 列下的事件。我的问题是我的登录页面 URLs 看起来像这样:
meteor.local/login?username=*******&password=+++++++&rememberMe=on
其中 ******* 是实际的 用户名,++++++++ 是相应的 密码!
原因:
由于我必须与多人共享此分析帐户,我不希望此信息在此处可用。
线索:
线索 1:
我曾经做过 GET http 调用,但我已经将它们全部更改为 POST 仍然没有修复了这个问题,因为我预计它不再通过 URL 传递普通参数。
线索 2:
我注意到默认的 google 分析 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 偶尔会被捕获。例如。在 pas 的 12,500 个独特事件中(总共约 30,000 个事件),它仅捕获了 9 URLs 的用户名和密码。其余12491个事件有
meteor.local/login
或
meteor.local/--
或
localhost/--
作为屏幕名称。
线索 5:
我还在分析帐户上放置了 4 "search and replace" 全局过滤器 以搜索此字符串
meteor.local/.*
换成这个
meteor.local/concealedURI
这似乎也不起作用。 我在 4 个不同的字段上添加了这个过滤器(因为 我仍然真的不知道 URL 来自哪里 ):
- 主机名
- 页面标题
- 推荐
- 请求 URI
线索 6:
这就是我调用 GA 实例发送事件的方式:
ga('send', 'event', 'button', 'click', eventName);
好的。因此,我不得不 运行 进行大量实验并尝试不同的方法来解决这个问题。
在尝试了我在问题中描述的所有事情后,我终于找到了解决这个问题的方法。
这个问题的主要原因是我使用了一个google分析账户设置来跟踪一个App,从使用 meteor js(基本上使用 cordova)构建的应用程序中捕获数据。
使用流星意味着我的应用程序的屏幕实际上是呈现为移动应用程序的网页。似乎 meteor 使用 URLs 来浏览这些屏幕。
另一方面,当从该页面触发事件时,google 分析会查看(并捕获)应用页面的屏幕名称。在 原生应用程序 中,此屏幕名称类似于 "About us"、"Contact Us"、"Home" 等
现在meteor应用不一样了,meteor返回的网名实际上是触发事件的页面的URL
这与 http 调用没有任何关系(无论它们是 GET 还是 POST),因为它是 meteor 用于导航的本地 URL 被传递下降到 google 分析,而不是任何 http 调用。
解决方案
1.
如果我将 google 分析帐户设置为 网页 跟踪器,我可以访问 "Exclude URL Query Parameters" 字段并且我可能会排除用户名和密码,正如@Mike 和@PhilipPryde 在评论中所建议的那样。 但是,我需要使用 google 分析集作为 app 跟踪器。所以,这对我不起作用。
失败
2.
我确实在 google 分析中对整个 view 进行了筛选,并搜索了 meteor.local/.* 并将其替换为 hiddenURL。
上的过滤器- 主机名
- 页面标题
- 推荐
- 请求 URI
没用。
但是当我使用相同的过滤器时
- 屏幕标签
字段,它起作用了。
但是,这只查看了屏幕浏览点击返回的屏幕名称,而不是事件。因此,这实际上也没有解决我的问题。
失败
最后,我不得不这样做:
GA 实例上有一个方法调用,可让您设置不同的选项。我最终使用了这个:
ga('set', 'screenName', 'hiddenURL');
这将屏幕名称更改为 "hiddenURL"。所以,我在每次活动前都使用它,它对我很有效。 我将事件发送到 google 分析的代码如下所示:
ga('set', 'screenName', 'hiddenURL');
ga('send', 'event', 'button', 'click', eventName);
PS:
这会将 real-time 分析报告中显示的屏幕名称更改为 "hiddenURL",每当有人触发事件时。但是,一旦他们转到另一个页面,它就会变回屏幕名称。因此,它也不会混淆您的任何屏幕视图数据,因为它没有被捕获为屏幕视图。
当然是因为,每次发送屏幕视图时,我都会将屏幕名称传递给我的 GA 实例。所以它看起来像这样:
sendScreenViewToGA = function (screenName) {
ga('send', 'screenview', {
'appName': 'Something',
'screenName': screenName,
'appVersion': x.x
});
}
如果我使用了现在在环境中设置的屏幕名称,我最终会将分析中的所有屏幕名称设置为 "hiddenURL"。
我真的希望这个 post 能帮助其他有同样问题的人并节省他们一些时间。