验证 AJAX 请求



场景

让我们假设在我的网站上的某个地方存在一个名为doSomething的函数,该函数向服务器发送 XHR-Request,目的是增加一个名为valueA的值。

//v:=value to increase valueA
;function doSomething(v){
//Sends XHR-Request to server to increase valueA by v
};

问题

使用当今的浏览器控制台/开发人员工具,每个业余爱好者都很容易找到和分析这些请求。因此,最终用户始终能够打开控制台并在自己的位置上执行该请求。

打开控制台:做某事(12(;

如何区分正常进程树发出的调用和用户触发的超出范围的调用。我想过将我的实际调用包装在一个包装器函数中,以恢复需要在实际调用中提供的键/哈希:

//f:=callback()
;function doSomethingWrapper(f){
//Sends XHR-Request and returns a key then calls f() passing the key
};
//k:= required key, v:=value to increase valueA
;function doSomething(k, v){
//Sends XHR-Request to server to increase valueA by v
};

然而,用户可以乖乖地调用该包装器。

问题

关键是,无论我在javascript中进行什么验证,它总是可以通过在客户端上更改我的代码来绕过。是否有验证这些请求的常用方法?

实际示例:给定一个由装满水的罐子组成的游戏。每当用户点击他的罐子时,水就会下降 1%。谁先清空罐子,谁就赢得了比赛。那么,是什么阻止了用户(除了知识(只是在控制台中以 for 循环执行调用并结束呢?

您需要授权并验证服务器端的所有请求。也没有什么可以阻止用户打开 DevTools,在网络选项卡中复制请求,并使用 curl 重新运行 ajax 请求的更改版本。

答案是否定的,您无法验证 AJAX 请求

现在,您如何才能更好地保护事物

  1. 您添加 CSRF 令牌。
  2. 仅允许来自源的 AJAX 调用
  3. 你缩小你的JavaScript文件
  4. 为您的请求添加限制

最新更新