【问题标题】:Multiple ajax calls via recursive function and DDOS-ing ourselves通过递归函数和 DDOS-ing 进行多次 ajax 调用
【发布时间】:2020-05-11 09:00:47
【问题描述】:

Jquery multiple Ajax Request in array loop链接的评论中,作者说在循环中发出ajax请求可能会导致我们自己进行DDOS攻击。

这通常只应用一个循环还是多个 ajax 调用?我的意思是,如果我通过递归函数(如

ajax(0);

ajax(index) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
            ajax(index+1)
        }
    };
    xhr.open('POST', 'http://example.com/ajax_handler.php');
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
    xhr.send();
}

ps。我知道我们可以“将所有数据聚集在一起,然后在一个请求中将其发送到服务器”,但我需要运行生成静态页面,将数据从客户端传递到服务器。因此,如果有成千上万的页面我必须通过 AJAX 传递给服务器,由于 POST 请求的限制,它们不能作为单个请求传递。

为什么会这样?我只想将生成器的所有逻辑保留在客户端,并在服务器上仅调用标准操作,例如读取和写入文件。即客户端通过ajax和服务器读取功能读取模板和内容,根据其逻辑构建页面html并将整个html传递给服务器写入一个html文件

【问题讨论】:

  • 为什么需要将几十个页面从客户端传递到服务器?不应该反过来吗?关于 ddos​​,它绝对取决于客户端和请求的数量以及服务器基础设施,因此对于一个客户端,执行多个 ajax 请求应该没问题,但如果有数千个客户端有数千个并发请求跨度>
  • 对于递归调用我不认为它会导致你自己DOSing,因为调用堆栈有限制(在一个函数中调用的函数的深度,比如说),通常无限递归的错误是@987654323 @
  • 我们谈论每个客户端有多少个 ajax 请求?查看您的代码实际上永远不会停止/无限请求
  • @johnSmith 这只是一个简化的例子。我知道我们需要一个条件来在我没有写入代码的某个时候停止该过程。作为您的第一条评论,请参阅添加到我的帖子中的最后一段
  • 好吧,AJAX 调用是异步的,所以按照您的意愿进行操作,您应该将 xmlhttprequest 设置为“同步”,以便它们按顺序进行。是的,但没有关于每分钟每个客户端有多少潜在客户和请求以及难以分辨的有效负载量的信息(您的概念对我来说似乎效率低下,我认为您应该发布所需的配置并在服务器端生成 html)

标签: javascript ajax xmlhttprequest ddos


【解决方案1】:

Rory McCrossan 描述的问题是,如果您一次发出多个请求。如果您有 很多 个请求,您可能会使服务器(和/或您的网络连接)过载 - 您不应该一次发出大量请求。 (最好不要每秒向服务器发送超过 5 个请求,或类似的东西。)

但是在你的代码中,你不是立即发送请求;您在任何时候最多只有一个请求处于活动状态,因此他所描述的问题不是您需要担心的。

也就是说,

成千上万的页面我必须通过 AJAX 传递到服务器

这是一个非常奇怪的要求,即使您没有使网络过载,也需要大量带宽。考虑是否有更优雅的问题解决方案,例如仅在请求页面时生成/发送页面。

【讨论】:

  • 谢谢。然而,Rory McCrossan 刚刚在页面上回复说“在递归函数中进行 [多个 ajax 请求] 有同样的问题” 那就是 DDOS-ing
  • 同步递归函数中,是的,但不是在异步函数中。
  • 如果递归函数在初始化最后一个请求后立即调用自身,您将发出大量并行请求。但是,如果递归函数仅在最后一个请求 完成 之后调用自身,就像您的情况一样,任何时候都只会有一个请求。您将消耗服务器资源,但没有任何固有问题
猜你喜欢
  • 2018-04-10
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
相关资源
最近更新 更多