也许我过度思考这个。
我在浏览器中运行了一些简单的javascript游戏(谜题等),当用户获胜时,根据他们完成此任务的速度,将积分发送到laravel后端。
当用户登录时,会创建一个典型的会话,当通过POST请求发送点数时,csrf和JWT也是如此。
用户是否可以打开chrome dev控制台并获取网址然后复制crsf,cookie或JWT并将点数发送到后端而不实际玩游戏?
在浏览器外呼叫的Apis不尊重Access-Controll-Allow-Origin政策。
任何人都可以解释是什么阻止用户这样做或如何阻止此操作并确保用户真正玩游戏以获得积分?
答案 0 :(得分:2)
一种方法可能是逐步安排游戏。也就是说,使用多个public protocol CustomDelegate {
func didLoad()
}
protocol InternalCustomDelegate {
func didLoad()
}
public class Foo {
public var delegate: CustomDelegate?
var internalDelegate: InternalCustomDelegate?
}
public class Bar {
var foo: Foo
init() {
self.foo = Foo()
self.foo.internalDelegate = self
}
}
extension Bar: InternalCustomDelegate {
func didLoad() {
print("bar has loaded")
}
}
元素。
初始页面只包含一个<form>
元素,其中只包含一部分游戏。
只有在提交该表单时,服务器才会将下一个<form>
元素发送给<form>
。
每个document
元素都有<form>
个元素,并带有唯一标识符;例如,时间戳,设置为<input type="submit">
属性并在服务器上生成;它会在游戏过程中在该步骤完成name
所需的最长时间内到期。
如果用户提交的<form>
没有唯一标识符,或者提交<form>
步骤超出完成代表流程中某步骤的<form>
所需的最长时间范围,则用户是被取消“赢得”当前比赛的资格,或者在未来的某个时间内玩游戏。