Securing/Obfuscating JavaScript API 请求

Securing/Obfuscating JavaScript API requests

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

完成的

伪代码:

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

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

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

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

有什么建议吗?

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

为了防止用户没有观看视频就获得奖励,你可以建立一些计时器,这样超过时间就无法获得奖励。

以下是我对此的看法-

我觉得您需要为此深入研究服务器端。

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

如果满足条件就打赏,否则不打赏。您可能会说这并不能保证观看完整的视频。是的,但至少试图恶搞的人必须等那么久。

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

这并不容易,它需要一些工作并且不是 100% 'bulletproof'。但是,与 javascript 相关的任何内容仍然可以在本地进行操作。