security - Google Analytics 将用户名和密码存储为 url 的一部分

标签 security url meteor google-analytics credentials

问题背景:

我正在为移动应用程序使用meteor js。 我已将其与 google Analytics 调用连接起来,基本上我使用两种类型的调用:

  1. 屏幕浏览次数
  2. 事件

屏幕 View 很好,但我遇到了事件问题。

当我转到 Google Analytics 仪表板中的行为 -> 事件 -> 屏幕时,我可以在屏幕名称专栏。我的问题是我的登录页面的页面 URL 如下所示:

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

其中********是实际的用户名,+++++++是相应的密码!

<小时/>

原因:

由于我必须与多人共享此分析帐户,因此我不希望在此处提供此信息

<小时/>

线索:

线索1:

我曾经进行GET http调用,但我已将它们全部更改为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

或者

meteor.local/--

或者

localhost/--

作为屏幕名称。

线索5:

我还在分析帐户上放置了 4 个“搜索和替换” 全局过滤器来搜索此字符串

meteor.local/.*

并将其替换为这个

meteor.local/concealedURI

这似乎也不起作用。 我已在 4 个不同的字段中添加了此过滤器(因为我仍然不知道 URL 来自何处):

  1. 主机名
  2. 页面标题
  3. 推荐
  4. 请求 URI

线索6:

这就是我调用 GA 实例发送事件的方式:

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

最佳答案

好的。因此,我必须进行大量实验并尝试不同的方法来解决这个问题。

尝试了我在问题中描述的所有内容后,我终于找到了解决此问题的方法。

此问题的主要原因是我使用设置为跟踪应用的 Google 分析帐户来捕获使用 构建的应用中的数据strong>meteor js(基本上利用cordova)。

使用meteor意味着我的应用程序的屏幕实际上是呈现为移动应用程序的网页。看起来 meteor 使用 URL 来浏览这些屏幕。

另一方面,当从应用程序页面触发事件时,谷歌分析会查看(并捕获)应用程序页面的屏幕名称。在 native 应用中,此屏幕名称类似于“关于我们”、“联系我们”、“主页”等。

现在,由于 meteor 应用程序不一样, meteor 返回的屏幕名称实际上是触发事件的页面的 URL。

这与http调用(无论它们是GET还是POST)没有任何关系,因为它是meteor用于导航的本地URL,正在传递给谷歌分析,而不是任何http调用。

<小时/>

解决方案

1.

如果我将 Google Analytics 帐户设置为网页跟踪器,我就可以访问“排除 URL 查询参数”字段,并且可以按照 @Mike 的建议排除用户名和密码和评论中的@PhilipPryde。 但是,我需要使用谷歌分析设置作为应用跟踪器。所以,这对我不起作用。

失败

<小时/>

2.

我确实在谷歌分析中对整个 View 进行了过滤,并搜索了meteor.local/.*并将其替换为hiddenURL。过滤器打开

  • 主机名
  • 页面标题
  • 推荐
  • 请求 URI

没用。

但是当我放上相同的过滤器时

  • 屏幕标签

现场,它起作用了。

但是,这仅查看屏幕 View 点击返回的屏幕名称,而不是事件。因此,这实际上也没有解决我的问题。

失败

<小时/>

最后,我不得不这样做:

GA 实例上有一个方法调用,可让您设置不同的选项。我最终使用了这个:

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

这会将屏幕名称更改为“hiddenURL”。所以,我在每次事件之前都使用了这个,它对我很有用。 我将事件发送到 Google Analytics 的代码如下所示:

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

PS:

每当有人触发事件时,Google Analytics 实时报告中显示的屏幕名称就会更改为“hiddenURL”。但是,一旦他们进入另一个页面,它就会变回屏幕名称。因此,它也不会干扰您的任何屏幕 View 数据,因为它不会被捕获为屏幕 View 。

当然,这是因为,每次发送屏幕 View 时,我都会将屏幕名称传递给我的 GA 实例。所以它看起来像这样:

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

如果我使用了当前环境中设置的屏幕名称,我最终会将分析中的所有屏幕名称设置为“hiddenURL”。

<小时/>

我真的希望这篇文章能够帮助其他有同样问题的人并节省他们一些时间。

关于security - Google Analytics 将用户名和密码存储为 url 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650702/

相关文章:

java - 我可以在运行我的小程序之前检查 Java 小程序证书是否可信吗?

javascript - 通过防止框架破坏来阻止网页泄露

java - 在websphere本地信任库中添加证书;以编程方式

java - ClassLoader.getResource 不断为现有资源返回 null

ios - 从 URL 在应用程序中打开文件

javascript - 将对象传回事件 Meteor?

javascript - 巴巴图斯 :star-rating error in meteor js

javascript - 错误: Router is not defined V0. 7.0 meteor 0.8.0

javascript - 如何禁止取景

javascript - 将对象的值从字符串转换为数字