“隐藏”JavaScript HTTP请求的最佳做法?

时间:2011-05-04 19:54:41

标签: javascript flash http html5 xmlhttprequest

我不确定如何制定问题,但我认为这更像是一个建议请求,而不是问题本身。

我们正在构建一个HTML5服务,用户可以通过该服务获得奖励(奖励,在社交游戏术语上)以完成一系列优惠。这些优惠大部分都是视频广告观看。我们已经有了这个内置Flash的实现,但对于HTML5,我遇到了一些关于如何进行请求调用来验证合法观看视频广告的问题。在Flash界面上,我们有SWF发出的一系列HTTP请求,有些在视频播放开始时,在中间和结尾,这些请求中的每一个都是相互关联的,这意味着,一个是在下一个请求中需要等等。“隐藏”这个“算法”的大多数逻辑都隐藏在SWF二进制文件中,它几乎可以满足它的目的。

然而,对于HTML5,我们必须依赖于世界上可见的JavaScript,并且“隐藏”逻辑是开放的。所以,我想这是一个关于如何处理这些案件的建议的呼吁,以便技术人员不能(如此容易地)访问它并利用该服务以编程方式获得信誉。混淆JavaScript看起来似乎有所帮助,但绝不能完全保护。

后端当然有一些额外的安全性(如频次上限,每个用户上限等),但由于我们的封顶每天都会清除,技术人员仍然可以找到一种方法来获得所有可用优惠的信用,即使没有完成它们。

2 个答案:

答案 0 :(得分:1)

听起来您希望确保您的服务器能够区分用户与您之间的UI交互而发生的请求,这些请求是您批准的,而这些请求并非以这种方式发生的请求。

这样的系统有很多攻击点。

  1. 检查JavaScript以查找事件处理程序并通过Firebug或其他工具调用它们。
  2. 检查代码中的所有密钥,并在不涉及浏览器的情况下生成HTTP请求。
  3. 在浏览器中运行代码以编程方式生成事件。
  4. 使用第三方工具检测浏览器以产生点击次数。
  5. 如果你有合理的仪器攻击解决方案(3和4),那么你可以查看Is there any way to hide javascript functions from end user?如何将秘密传入客户端,以便您签署您的请求。除此之外,混淆是阻止一个不太确定的攻击者进行任何攻击的唯一(并且不完美)方式,并且速率限制和UI事件记录可能是阻止确定的攻击者从大规模欺诈中受益的最佳方式。

答案 1 :(得分:0)

您将无法阻止确定的攻击者(即使使用SWF,但它更加混淆)。你最好的办法是确保:

  1. 在努力方面规避你的措施是很昂贵的,也许是通过使用计算上昂贵的加密算法,所以他们不能只设置一堆脚本来实现它。
  2. 收益微乎其微(用户上限是如何降低收益的一个例子;如果你给出积分,那就没关系;如果你邮寄了二十美元钞票,那你就不走运了)
  3. 成本效益。