lei*_*iiv 27 connect node.js express
我是node.js的新手并且表达并且已经尝试了一段时间.现在我对与解析请求体相关的快速框架的设计感到困惑.来自快递的官方指南:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
Run Code Online (Sandbox Code Playgroud)
在设置了所有中间件之后,我们添加了我们想要处理的路由:
app.post('/test', function(req, res){
//do something with req.body
});
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,在检查路由有效性之前,将首先解析所有请求主体.解析无效请求的主体似乎效率很低.更重要的是,如果我们启用上传处理:
app.use(express.bodyParser({uploadDir: '/temp_dir'}));
Run Code Online (Sandbox Code Playgroud)
任何客户端都可以通过上传任何文件来轰炸服务器(通过向任何路由/路径发送请求!!),所有这些都将被处理并保存在'/ temp_dir'中.我无法相信这种默认方法正在被广泛推广!
我们当然可以在定义路径时使用bodyParser函数:
app.post('/test1', bodyParser, routeHandler1);
app.post('/test2', bodyParser, routeHandler2);
Run Code Online (Sandbox Code Playgroud)
甚至可能在处理路径的每个函数中解析主体.但是,这很麻烦.
是否有更好的方法可以仅对所有有效(已定义)路由使用express.bodyParser,并且仅在选定路由上使用文件上载处理功能,而无需重复执行大量代码?
Pet*_*ons 31
你的第二种方法很好.记住,你也可以通过中间件功能阵列app.post,app.get和朋友.因此,您可以uploadMiddleware使用处理POST主体,上传等的东西来定义一个调用的数组,并使用它.
app.post('/test1', uploadMiddleware, routeHandler1);
Run Code Online (Sandbox Code Playgroud)
这些例子适合初学者.初学者代码可以帮助您在第1天完成该死的工作,而高效安全的生产代码往往非常不同.你提出了一个关于不接受上传到任意路径的有效观点.至于解析所有请求主体"非常低效",这取决于无效/攻击POST请求与发送到您的应用程序的合法请求的比率.在您的网站开始流行之前,攻击探测请求的平均背景辐射可能不足以担心.
这里还有一篇博客文章,其中详细介绍了bodyParser的安全性考虑因素.
| 归档时间: |
|
| 查看次数: |
14604 次 |
| 最近记录: |