gpt4 book ai didi

javascript - 如果没有为 post 请求中的 'data' 事件创建事件处理程序,会发生什么情况?

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:38 25 4
gpt4 key购买 nike

如果您查看 Casey Chu(2010 年 11 月 30 日回答)在这个问题中的回答:How do you extract POST data in Node.js?

您将看到他正在响应“数据”事件,以构造请求的正文。在这里复制代码:

var qs = require('querystring');

function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;

// Too much POST data, kill the connection!
if (body.length > 1e6)
request.connection.destroy();
});
request.on('end', function () {
var post = qs.parse(body);

// use post['blah'], etc.
});
}
}

假设我不关心 POST 请求,因此从不检查请求是否是 POST 或创建“数据”事件处理程序,是否存在有人可以通过发送非常大的 POST 请求来阻止我的线程的风险?例如,如果我不使用上面的代码,那么会怎样:

function hearStory(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Cool story bro!");
response.end();
}

那么对于非常大的 POST 请求会发生什么?服务器是否会忽略正文?这种方法有什么风险吗?获取请求(包括其 header )必须小于 80kB,因此这似乎是避免服务器泛滥的简单方法。

最佳答案

希望此类攻击能够在通过防火墙或其他方式到达您的服务器之前被检测到并避免。您不应该使用服务器本身来处理 DOS 攻击。但是,如果他们恶意访问您的服务器,则需要有一种方法来处理它。如果您打算处理 POST 请求,您引用的代码将会有所帮助。

如果您只是想完全避免 POST 请求而不监听它们(如第二个代码片段所示),则可以执行如下操作。

function denyPost(req, res) {
if (request.method == 'POST') {
console.log('POST denied...'); // this is optional.
request.connection.destroy(); // this kills the connection.
}
}

当然,如果您打算以某种方式处理发布请求,那么这将不起作用。但同样,DOS 攻击需要在到达您的服务器之前进行处理。如果他们到达了那里,他们就已经赢了。

关于javascript - 如果没有为 post 请求中的 'data' 事件创建事件处理程序,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com