javascript - Vue.js 到 Node.js 服务器 : How can I secure my POST call?

标签 javascript node.js vue.js

我有一个用 Vue.js 编写的简单单页应用程序(游戏),后端在 Node.js 中,全部托管在 Heroku 上。我在 Vue 中的前端使用 axios 对我的后端进行 api 调用,它使用 expressmysql 库来查询我的数据库并获得高分或发布新分数。

我把完成的游戏给了我的 friend ,他们马上意识到他们可以使用 postman 或类似的东西来做一个简单的邮寄请求并发送一个假分数,所以我想保护它。

我对任何相当简单的事情都持开放态度,但我想设置一个 token ,如果它匹配,我可以在我的 Node.js 中检查它,如果不匹配,则发送 403。我已经尝试设置一个环境变量带有 token ,但如果我检查元素(如果我使用 .env 文件然后获取值),前端最终会在资源中显示该 token 。我也试过我的 config.json 文件,但显然没有办法对任何使用 inspect element 的人隐藏这些值。我尝试检查 req.hostname 但即使我从 postman 发送请求,它也返回 200。

如何保护我的帖子请求?

最佳答案

问题

正如其他人所指出的,没有通用的方法来生成无法伪造的客户端信息。问题在于,无论生成此信息的规则多么复杂(例如,游戏分数必须是质数),有人可能会隔离这些规则并创建任意信息(例如,不玩游戏就伪造质数分数)。

对于游戏,这通常会导致输入处理(客户端)和游戏规则(服务器)在客户端和服务器之间分离,使得无法将分数生成与游戏规则隔离。然而,这会引入延迟和异步性,并且需要对客户端游戏进行大量重构 - 三个难题。

解决方案

在某些情况下存在不同的解决方案。以国际象棋为例:给定一个棋盘,要求客户在交配之前尽可能少地走棋。移动次数就是得分,得分最低者获胜。客户端必须发送特定的 Action ,服务器验证结果。换句话说,客户端信息是玩家为游戏生成的全部输入。

作为通用模式,这意味着:将客户端(分数)信息定义为整个游戏输入。记录整个输入客户端并使用此输入重新运行游戏服务器端。验证结果。

要求:

  • 将输入处理与游戏规则分开,使其可以使用预定义的输入运行。
  • 实现等效的服务器端和客户端游戏规则。
  • 消除任何随机源!(例如,对相同的随机数生成器或服务器生成的随机数列表使用相同的种子)

您已接近此解决方案,因为您明智地为服务器和客户端选择了一种语言,并且 Javascript 将数字表示为与平台无关的 64 位 float (这避免了舍入错误)。 此解决方案避免了延迟和异步性,但不允许多人游戏,其中需要原子服务器端更新和耦合玩家输入。

关于javascript - Vue.js 到 Node.js 服务器 : How can I secure my POST call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547978/

相关文章:

vue.js - 在 Vue 应用程序中导入全局 scss 样式以及单独的 mixin 和变量 scss 文件

javascript - 无法在铯sandcaSTLe中提供.terrain文件

javascript - paper.js - 使用闭合路径实现更平滑的边缘

javascript - 2 个表选择 jquery 的相同按钮

javascript - 如何使用mongoose查找mongodb中的所有文档

javascript - JavaScript 生态系统中的 .co 文件是什么

javascript - 在 v-for 循环的某个索引上添加一个空 div

javascript - 替换后字符提交错误

javascript - 使用登录 NodeJS 保护目录

vue.js 在 jquery ajax 之后显示组件