谷歌分析如何避免欺骗攻击?

12

我一直在想Google Analytics如何避免欺骗。当你注册账号时,他们会让你上传一个文件来验证你是否拥有该域名。但同时,他们也会提供带有唯一公共代码的脚本标签(以下用“XXXXXXX”代替)。如果有人复制了该代码、欺骗请求头,并通过curl按照Google的认证策略假冒我的网站,那么有什么能够阻止他们呢?

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'XXXXXXX']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

我之所以问这个问题是因为我正在尝试创建一个类似的JavaScript插件,将我的网站数据暴露给参与的网站(“客户端”)。我不确定如何在客户端服务器端没有私钥的情况下获得此功能。这有点糟糕,因为我真的很想让它像Google Analytics一样容易集成。你有什么想法吗?


2
@freejosh 我假设谷歌解决了这个问题,不是因为我的网站很重要,而是因为所有使用他们分析软件的网站的完整性都很重要。然而,问题与谷歌关系不大,更多地与此特定策略中的安全有关。在这种情况下,你如何防止欺骗? - leahy16
2
@RepWhoringPeeHaa 我不完全确定你的意思,但这与谷歌无关。这是关于如何确保一个网站真正是一个网站,而不是一个抓取公共标识并更改请求头的欺骗者的问题。 - leahy16
2
@jmort253,SSL 与任何事情有关吗?API 令牌是公共的,我同意 OP 的看法,即如何防止欺骗是一个有趣的难题。 - Kirk Woll
1
@KirkWoll - 如果它是公开的,那么你如何防止它被客户端和服务器之间的80端口监听器读取?如果你向桥上的巨魔大喊密码,让其他人都能听到,那么他们也可以使用同样不安全的密码穿过那座桥。我的观点是,如果你想要验证任何东西,你必须以安全的方式进行验证。 - jamesmortensen
1
此外,Google Analytics并不能阻止其他数据被记录。试一试,在一个你自己搭建的小网站上放置你的JS代码,你会看到数据被记录下来。唯一防止这些数据被写入GA的方法是使用过滤器将其过滤掉。在提问者的情况下,他并不是在接收数据,而是在分享数据,这与Google Analytics的作用恰好相反,这意味着他可能正试图保护自己的数据免受未经授权的访问。我的建议是从问题中删除所有关于GA的内容,以避免造成混淆。 - jamesmortensen
显示剩余8条评论
2个回答

5
听起来这个问题与 Google Analytics 实际上没有什么关系(我真的建议你从问题中删除它,因为我认为它会误导大多数人,并且不会让你更接近答案)。
你有一些数据,想要只与选定的网站分享。除了使用某种授权方案保护数据并向你给予密码或密钥以让他们访问数据之外,没有其他方法。即使是这种方案,也只能在服务器的私有区域中访问数据的代码才能够工作(因为密钥/密码可以得到保护),而浏览器中的 JavaScript 无法做到这点。
至于 GA 仿冒(我认为它与你的真正问题无关),我怀疑 Google 并不过分担心它,因为除了针对 GA 的拒绝服务攻击(我想他们已经有防护措施),记录别人网站的点击有什么好处呢?谁都不能访问数据,因为数据在别人的 GA 帐户中。我想可能会有人这样做只是为了干扰别人的 GA 数字,但是如果没有更多有利可图的动机,那么做这件事情的人可能并不多。

1
分析信息对许多组织非常重要。我认为,记录虚假的分析数据以针对另一个网站所获得的收益是相当明显的,就像在任何竞争市场中进行任何形式的破坏性攻击一样。在这种情况下,您正在剥夺竞争对手获得 GA 应提供的有价值的分析洞察力的良好访问权限,并/或通过误导性数据将他们引向危险之路。这个问题与 GA 非常相关,因为安全机制非常具体于产品/技术。 - Sheepy
1
我完全理解这个问题,因为我正在寻找完全相同的东西。请解释一下像Google Analytics这样的服务背后的身份验证架构。在我看来,所提到的示例非常好。 - RandallTo

3

有趣的问题。

正如评论所提示的那样,谷歌并没有真正解决这个问题。事实上,在你的测试网站/开发环境中使用条件代码/预处理内容来禁用GA是很常见的,因为如果不这样做,它会破坏你的数据。

您可以尝试使用“三脚架”方法来跟踪分析服务器、客户服务器和客户端。它可能像这样工作:

  • 客户服务器和您的分析服务器共享一个秘密密钥。当客户访问其网站时,客户服务器告诉您的分析服务器,它想要跟踪此特定客户。

  • 您的分析服务器为此用户生成一个会话ID,并返回一个动态URL给客户服务器。该URL指向您的JavaScript跟踪代码(或其加载程序),注入了会话ID。

  • 客户服务器将页面发送给客户端。页面包含具有唯一会话ID的客户端跟踪代码。操作被跟踪并发送到您的分析服务器。

  • 在您的分析服务器上,您会从客户机接收跟踪信息。您检查会话ID是否有效且未过期,并检查IP地址是否匹配。

这应该提供了额外的安全级别。不幸的是,它将不会像“易于集成的谷歌分析”那样容易...因为它需要您的客户参与服务器端。对于没有经过客户身份验证的用户跟踪,也不会带来太大的好处,因为第三方可以简单地访问您的客户网站以获取有效的会话ID,然后向您的分析服务器发送一些虚假信息。然而,对于经过客户验证的客户端,这可能是有用的。

祝你好运!


1
顺便提一下,还有开放式网络分析工具 - Dagg Nabbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接