作为 Nodejs 的新手,我直接开始编写一个简单的应用程序,而没有真正阅读良好的安全实践。我刚刚发现使用bodyParser()
所有路由实际上是一件坏事,因为它允许使用多部分文件进行 DOS 攻击。
推荐的修复方法是仅根据路由加载特定模块。即,对于多部分文件上传,使用multipart
. 对于没有文件上传的常规 POST(即文本表单提交),使用express.json(), express.urlencoded()
.
或者另一种选择是将busboy与connect-busboy一起使用。但我感到困惑的是如何指定哪个路由应该处理多部分数据,哪个不应该处理?否则,我不会有与 with 相同的问题bodyParser
吗?
此外,busboy
文档说它不处理GET
:
If you find that req.busboy is not defined in your code when you expect it to be, check that the following conditions are met. If they are not, req.busboy won't be defined:
1. The request method is not GET or HEAD
所以,我更加困惑如何params
在GET
. 我认为bodyParser
这是为我做的,所以我可以使用req.params
.
例如,我将如何使用这个简单的应用程序迁移bodyParser()
到:busboy/connect-busboy
var express = require('express');
var app = express();
var http = require('http').Server(app);
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var busboy = require('connect-busboy');
app.use(busboy());
// How to use busboy to prevent multipart files here?
app.post("/form_data_no_fileupload", function(req, res) {
var somedata = req.body.somedata;
});
// Use busboy to handle both regular form data + fileuploads
app.post("/form_data_AND_fileupload", function(req, res) {
});
// What would handle GET without bodyparser?
app.get("/get_something", function(req, res) {
var params = req.params;
});
http.listen(3000, function() {});