Javascript PHP到JS,将解析为HTML

Javascript PHP到JS,将解析为HTML,javascript,php,Javascript,Php,我在做一个小游戏。我通过构建数据,然后像这样将其输入HTML,将必要的游戏数据传输到客户端 <?php echo "<script>"; echo "window.gd = ".json_encode($manager->game, JSON_NUMERIC_CHECK).";"; echo "window.ships = ".json_encode($manager->ships, JSON_NUMERIC_CHECK).";";

我在做一个小游戏。我通过构建数据,然后像这样将其输入HTML,将必要的游戏数据传输到客户端

  <?php
    echo "<script>";
    echo "window.gd = ".json_encode($manager->game, JSON_NUMERIC_CHECK).";";
    echo "window.ships = ".json_encode($manager->ships, JSON_NUMERIC_CHECK).";";
    echo "window.ballistics = ".json_encode($manager->ballistics, JSON_NUMERIC_CHECK).";";
    echo "window.playerstatus = ".json_encode($manager->playerstatus, JSON_NUMERIC_CHECK).";";
    echo "window.reinforcements = ".json_encode($manager->reinforcements, JSON_NUMERIC_CHECK).";";
    echo "window.incoming = ".json_encode($manager->incoming, JSON_NUMERIC_CHECK).";";
    echo "</script>";        
  ?>

  <!DOCTYPE html>
    blablabla
  </html>
然后,我使用大量客户端JS逻辑将此服务器游戏数据转换为可用于游戏的内容

问题是,在那些全局JSs变量中仍然存在原始游戏数据,理论上,玩家可以在我的本地脚本转换它们之前访问并查看/更改这些数据,以便他可以欺骗自己的东西,或者他可以更详细地查看敌人的东西


我怎样才能避免这种情况,或者用什么方法来代替我选择的方法?

而不是使用全局变量,我建议您在每次需要时使用AJAX get方法从php/json输出文件中获取这些值。在这种情况下,您将确保用户拥有权限,并且他将无法从控制台超越这些权限。

就我个人而言,我认为最好使用AJAX获取数据,而不是将所有内容存储在全局变量中,每次你需要数据时,你都可以得到它


但是,使用JavaScript,所有数据都可以通过控制台访问。

客户端总是可以作弊;玩游戏的人完全控制自己的浏览器。@Pointy是对的。如果你想让作弊变得更难,那么你可以从考虑到这是一场游戏以及你的目标受众是谁开始思考他们不作弊的重要性。如果你的观众是一群10岁的年轻人,那么你可能就不用担心了。用目前的设置是没办法解决的。如果JS使用view source,它将始终显示。你只需要希望用户诚实,按原样玩游戏。他可以更详细地看到敌人的东西。防止这种情况发生的唯一方法是检查服务器端是否允许玩家看到敌人的某些细节。敌人在视线之外?不要提供他们船只的位置。除非你添加某种类型的加密和令牌/密钥交换,否则这仍然可能被欺骗。如果他使用JavaScript,我会假设他希望它是“实时”的,这样用户就可以与显示的项目交互。json是这样的,他可以在一开始就将这些值输入JavaScript。这可能是最好的方法,就在这里。这不会有帮助。这些数据仍然可以在浏览器中使用。确实可以,但仅仅是为了欺骗一个简单的游戏,就需要做更多的工作。没错@Quentin,你可以看到数据抛出连接,你可以打开控制台查看数据,但它没有嵌入到源代码中。我认为问题是要从源代码隐藏数据,避免将数据存储在全局变量中。