0

这比问题更“思考”。我在考虑如何保护 javacript 时遇到问题。

假设我有这个设置:

Main page with iframe in it
Iframe with content.

现在,假设用户必须在 iframe 中玩游戏。在他完成游戏后,iframe 调用:

window.parent.givePrice();

父级将显示模态窗口:

function givePrice(){
  jQuery('.mask').show();
  jQuery('#won').show();
}

在这个模态窗口中,他们将有类似的东西

Congratulations! you just won a brand new BMW! Click Here to get your price

在他点击链接后,他的名字(通过 ajax - 不相关)被签名到数据库表“winners”中。

(请记住,这只是一个例子)。

现在这一切听起来都很棒,但我可以看到很多安全漏洞。例如,如果我使用 firebug 并编写“givePrice();” 它直接向我展示了我赢得的模式,即使我根本没有接触游戏。

有人可以讨论一下,保护这样的例子的最佳方法是什么?

谢谢

4

2 回答 2

5

防止某人作弊的唯一方法是让猜测(或任何让他们“获胜”的行为)成为服务器的往返:

  1. 触发获胜的尝试(例如,用户点击某物,或猜测,或其他任何东西)。
  2. 您的页面将信息(包括用户名)发送到服务器。
  3. 服务器做了几件事:
    1. 检查与该帐户和 IP 地址相关的速率限制。(所以用户不能仅仅创建一个试图在一个月内每秒赢一次的脚本,等等。)
    2. 检查猜测或其他。
    3. 如果星星对齐,则记录该用户“获胜”。
  4. 显示对用户的响应。

如果您想将获胜和接受获胜分开的步骤,您可以通过另一个往返来完成。在第一次旅行中,服务器会生成一个唯一的接受代码,并记录用户获胜的情况以及他们的接受代码在服务器上是什么。在第二次行程中,涉及发回代码的页面,检查代码(和其他几个欺诈检查)并记录用户接受。

仅在客户端执行此操作没有安全的方法。请记住,您不能信任从客户端发送的任何内容。

于 2012-04-05T09:13:01.050 回答
0

我会说不要通过纯 JavaScript 来做,并在服务器端使用一些检查。您可以随时使用 Firebug 或任何其他类似工具突破任何 Javascript 保护。甚至通过直接向服务器发出请求并发送虚假数据。

所以IMO所有检查都应该在服务器端完成:用户是否打开游戏,然后从游戏发送他实际玩过的数据等。

于 2012-04-05T09:39:09.030 回答