【问题标题】:Securing/Obfuscating JavaScript API requests保护/混淆 JavaScript API 请求
【发布时间】:2018-11-03 13:18:02
【问题描述】:

我有一个页面,允许用户观看 YouTube 视频并在视频播放结束后自动获得奖励。这是通过 Youtube JS API 完成的:

伪代码:

function videoStoppedPlaying() {
    requestRewardFromServer(); // currently uses an XMLHttpRequest
}

这种方法的问题在于,人们只能打开浏览器控制台并手动调用requestRewardFromServer()

我已经对代码进行了混淆处理,但这就像在船上的洞上贴绷带一样;它并没有解决问题。

编辑:到目前为止,唯一接近的解决方案是使用时间戳。尽管这不是理想的解决方案,但我会牢记建议并尝试进一步混淆 JS 代码。

有什么建议吗?

【问题讨论】:

  • 我认为你可以(也许你已经有)有一个方法 videoStartedPlaying() 也调用服务器。然后,当第二种方法到达服务器时,服务器将这两个请求之间的时间与视频的时间进行比较。如果它较低,则意味着出现问题。这并不完全是您想要的,但它会带来一些小的改进。
  • 对此没有真正的“解决方案”,因为您必须信任来自客户端的信息。我至少也会使用时间戳,并将播放开始和结束时间与视频长度进行比较(假设你想强迫人们在获得奖励之前观看整个 sh*tty 的事情。)当然这不会阻止我从调用与以前相同的手动记录播放开始时间戳的方法,然后在几分钟内执行其他操作,然后调用第二个说我已经看完的方法...
  • ……终于没有什么能阻止用户打开您的页面然后查看其他内容了。

标签: javascript api security obfuscation


【解决方案1】:

除了检查结束时间(开始时间与视频长度)之外,控制用户是否真正在观看视频的唯一解决方案是实际检查用户是否真的在观看视频。我想您有一个功能可以告诉您用户在视频的哪一分钟(或百分比)。因此,您可以通过 javascript 定期通知服务器:例如,每 5 秒或每 5% 的视频,客户端必须向服务器发送一个 xmlhttp 请求以通知它。服务器将检查客户端是否按相应顺序接收了所有请求(或者几乎,也许他重新观看了其中的一部分,您将必须找出适当的算法)。

这并不容易,它需要一些工作,而且还不是 100% 的“防弹”。但是,任何与 javascript 相关的东西仍然可以在本地进行操作。

【讨论】:

  • 由于我使用的是新的 StackOverflow 帐户,因此我无法再为您的答案投票。这是一个非常有创意的,可能会节省最后期限的解决方案。谢谢!
  • 我很高兴它有所帮助。我认为您至少可以将此标记为正确答案,以供将来参考这篇文章。
【解决方案2】:

获得奖励时,请存储 Youtube 视频 ID,以便每个视频至少获得一个奖励。当然,您必须跟踪视频 ID,否则您可以传递任何字符串。

为了防止用户在没有观看视频的情况下获得奖励,您可以构建一些计时器,以便在超过时间后无法获得奖励。

【讨论】:

    【解决方案3】:

    以下是我对此的看法-

    我觉得你需要为此深入服务器端。

    • 在服务器上设置会话变量,如video_length = some_length。
    • 从视频开始,向服务器发送一个ajax请求并设置一些会话变量,如video_started = some_time。
    • 现在,当您调用requestRewardFromServer() 时,将current timevideo_start 进行比较。它需要greater than or equal to video_length

    如果满足条件,奖励他们,否则不。您可能会说这并不能保证观看完整的视频。是的,但至少试图欺骗的人必须等待那么长时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2016-07-28
      • 1970-01-01
      • 2015-02-03
      • 2014-10-11
      相关资源
      最近更新 更多