【问题标题】:Limit size of AJAX response限制 AJAX 响应的大小
【发布时间】:2018-07-16 16:54:27
【问题描述】:

我正在构建一个去中心化的应用程序(我不控制服务器,只控制客户端),并且想要添加一些健全性检查和预防措施来阻止坏人做恶意的事情。这涉及(以及许多其他事情),通过使用从服务器发送的任意有效负载数据来防止客户端上的 DoS 尝试。

问题是这样的:客户端如何限制通过 JQuery AJAX 从服务器接收的数据的最大大小?如果我希望获取几个字节的 JSON,但在我发出 AJAX 请求时却收到一个 30MB 的视频文件,我如何在收到前 16 KB 后停止请求并抛出错误?

虽然我认识到我的事业的性质是独一无二的,但我们欢迎任何反馈。

【问题讨论】:

  • 您无法控制服务器发送的内容。问题没有任何意义
  • 您唯一能做的就是在进行 GET 之前尝试 HEAD 请求并检查内容长度标头
  • “客户端如何限制最大尺寸” 他们不能,除非您作为 API 开发人员添加一种方法来处理它。因此,如果您可以控制 API,则可以通过在有效负载中发送 max_resultsmax_response_size 密钥等方式来实现一些限制,但随意,这不是我见过的事情。
  • @charlietfl 我知道我无法控制它,但如果响应太大,我只想“中止”请求。我正在使用 IPFS 来查找哈希,所以不要认为 HEAD 会起作用
  • 很多用于批量请求的 API 都有一个参数来指定返回多少结果。

标签: javascript jquery ajax sanity-check


【解决方案1】:

正如@Barmar 在 cmets 中指出的那样,这是一个简单的案例,检查下载的“onprogress”事件并在超过我想要的最大大小时终止它。

这是任何相关方的代码:

var xhr = $.ajax({
    url: "your-url",
    success: () => {
        // ...
    },
    xhrFields: {
        onprogress: function(progress) {
          if (progress.loaded > config.MAX_HASH_DESCRIPTOR_SIZE) {
            // stop any unreasonably long malicious payload downloads.
            xhr.abort()
          }
        }
      }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多