1

我知道完全防止用户作弊和/或破解 Web 应用程序是不可能的,但我发现的这个漏洞很容易找到,它真的应该被堵住。

https://mcthompsonatl.github.io/

我实际上并没有编写任何代码。我得到了一个非常基本的“找到所有 6 个对象”(在本例中为钥匙)猜谜游戏,这是一位前雇员(他不是职业程序员)为我们的一个客户的促销而写的。逻辑是合理的,它需要一些格式化工作,但是在开发者模式下测试它时,我花了很少的时间发现只需检查每个类就可以轻松赢得<div>游戏card。因为这是用于促销比赛,所以我一直在尝试找出一种方法来隐藏或更改破坏游戏的代码,以便在开发人员模式下检查任何卡片都不会显示任何提示。

我能找到的一种解决方案是将卡片元素更改为多个 HTML5 Canvas 元素。这样做的两个问题是 1. 我使用 Canvas 的经验为零; 2. 即使我这样做了,这似乎也是一项极其漫长而痛苦的任务,我不确定我是否会被允许d 需要学习足够的知识来解决问题。这是可以用 PHP 隐藏的东西吗?我在这里找到一个明智的解决方案有点难过。任何帮助表示赞赏。

4

1 回答 1

1

评论太长了。

根据我从游戏中了解到的情况。您有 36 个框,您需要单击随机框。如果您单击正确框的 X 个数字,您就赢了。

我能够通过检查 HTML 并搜索指示获胜密钥的图像来作弊。图像名称是images/keytowin/frontImage.png

一种解决方案可能是不将指示“正确”选择的图像预先分配给 HTML div。相反,仅在单击图像后分配图像。这将使它更难找到,因为单独的 HTML 不会泄露它。

这里的想法是Random。使用 Javascript,生成 3 个介于 1 和 36 之间的随机数。这三个随机数表示中奖框。如果用户单击一个框,并且它具有相同的编号(我注意到div编号为data-id="1"),则使用 JS 在内部 div 中动态添加图像。

然而,这三个随机数将在游戏开始时确定。因此,模糊变量很重要。

我提供了一个示例代码来演示这个概念。

var luckyNumbers = getUniqueNumbers();
var winImg = "<img  src='https://mcthompsonatl.github.io/images/keytowin/frontImage.png' alt='X LOGO'>";
var loseImg = "<img  src='https://mcthompsonatl.github.io/images/keytowin/TryAgain.png' alt='X LOGO'>";

console.log(luckyNumbers);

$(".card").on("click", function() {

  if (!$(this).hasClass("clicked")) {
    $(this).addClass("clicked");

    selected = Number($(this).attr("data-id"));
    if (luckyNumbers.indexOf(selected) > -1) {
      //code to put a key image     
      $(this).find(".back").append(winImg);
    } else {
      console.log("wrong: " + selected);
      //code to put not-winning image     
      $(this).find(".back").append(loseImg);
    }

  }

});



function getUniqueNumbers() {
  var arr = []
  while (arr.length < 3) {
    var someRand = Math.ceil(Math.random() * 36)
    if (arr.indexOf(someRand) > -1) continue;
    arr[arr.length] = someRand;
  }
  return arr;
}
img {
  width: 50px;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta content="width=device-width" name="viewport">
  <title>JS Bin</title>
</head>

<body>
  <div class="game">


    <div class="card" data-id="5">
      <div class="inside">
        <div class="front">
          <img src="image/someimage.jpg" alt="keytowin">
        </div>
        <div class="back">
        </div>
      </div>
    </div>

    <div class="card" data-id="6">
      <div class="inside">
        <div class="front">
          <img src="image/someimage.jpg" alt="keytowin">
        </div>
        <div class="back">
        </div>
      </div>
    </div>


    <div class="card" data-id="7">
      <div class="inside">
        <div class="front">
          <img src="image/someimage.jpg" alt="keytowin">
        </div>
        <div class="back">
        </div>
      </div>
    </div>


  </div>
  <script src="https://code.jquery.com/jquery-2.2.4.js">
  </script>
</body>

</html>

于 2017-07-19T22:27:34.913 回答