也许我想多了。
我在浏览器中运行了一些简单的 javascript 游戏(拼图等),当用户获胜时,积分会根据他们完成游戏的速度发送到 laravel 后端。
当用户登录时,会创建一个典型的 session ,当通过 POST 请求发送积分时,csrf 和 JWT 也是如此。
用户是否可以打开 chrome 开发控制台并获取 url,然后复制 crsf、cookie 或 JWT,并将点数发送到后端,而无需实际玩游戏?
在浏览器外部调用的 API 不遵守 Access-Controll-Allow-Origin 策略。
谁能解释是什么阻止了用户这样做或如何阻止这种行为并确保用户真正玩游戏来赚取积分?
最佳答案
一种方法是按步骤安排游戏。即使用多个<form>
元素。
初始页面将包含一个 <form>
元素与游戏的一部分。
只有提交该表单时,服务器才会发送下一个 <form>
元素到 document
.
每个<form>
具有 <input type="submit">
的元素具有唯一标识符的元素;例如,时间戳,设置为 name
属性并在服务器生成;在完成 <form>
所需的最长时间内到期在游戏过程中的那一步。
如果用户提交 <form>
没有唯一标识符,或 <form>
的步骤在完成 <form>
所需的最长时间范围之外提交代表过程中的一个步骤,用户将被取消“赢得”当前游戏的资格,或者在未来给定的时间内玩游戏的资格。
关于javascript - 保护 Web api 不被浏览器外部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583449/