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 time
与 video_start
进行比较。它需要 greater than or equal to
video_length
.
如果满足条件就打赏,否则不打赏。您可能会说这并不能保证观看完整的视频。是的,但至少试图恶搞的人必须等那么久。
控制用户实际观看视频的唯一解决方案,除了检查结束时间 - 开始时间 vs 视频长度之外,就是实际检查用户是否真的在观看它。我想你有一个功能可以告诉你用户在视频的哪一分钟(或百分比)。因此,您可以通过 javascript 定期通知服务器:例如,每 5 秒或视频的每 5%,客户端必须向服务器发送一个 xmlhttp 请求以通知它。服务器将检查客户端是否以相应的顺序收到了所有请求(或者几乎,也许他重新看了其中的一部分,你将不得不找出一个合适的算法)。
这并不容易,它需要一些工作并且不是 100% 'bulletproof'。但是,与 javascript 相关的任何内容仍然可以在本地进行操作。
我有一个页面,允许用户观看 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 time
与video_start
进行比较。它需要greater than or equal to
video_length
.
如果满足条件就打赏,否则不打赏。您可能会说这并不能保证观看完整的视频。是的,但至少试图恶搞的人必须等那么久。
控制用户实际观看视频的唯一解决方案,除了检查结束时间 - 开始时间 vs 视频长度之外,就是实际检查用户是否真的在观看它。我想你有一个功能可以告诉你用户在视频的哪一分钟(或百分比)。因此,您可以通过 javascript 定期通知服务器:例如,每 5 秒或视频的每 5%,客户端必须向服务器发送一个 xmlhttp 请求以通知它。服务器将检查客户端是否以相应的顺序收到了所有请求(或者几乎,也许他重新看了其中的一部分,你将不得不找出一个合适的算法)。
这并不容易,它需要一些工作并且不是 100% 'bulletproof'。但是,与 javascript 相关的任何内容仍然可以在本地进行操作。