Express.js - Helmet.js和其他中间件,以及挂载的应用程序?

时间:2016-03-11 03:49:36

标签: javascript node.js express helmet.js

在最近的学习项目中,我使用三个Express.js应用程序将项目分成更易于管理的部分。

一个应用程序是" primary"应用程序,一个倾听连接的人。其他两个安装在主应用程序的特定路径上。

在主应用上调用app.disable('x-powered-by');是否足以禁用X-Powered-By标头,或者是否需要在每个已安装的应用中完成此操作?

同样,我正在研究如何使用Helmet.js尝试为整个项目添加一些额外的安全性。是否足以在主应用程序中包含Helmet.js中的任何中间件,还是需要在已安装的应用程序中定义这些中间件?

我不觉得我理解一些设置和中间件如何影响已安装的Express.js应用程序,并希望得到更多经验的人的进一步解释。

修改:在使用app.disable('x-powered-by')并检查来自服务器的响应后,如果我不在主应用程序实例中禁用它,则会显示X-Powered-By标头和任何挂载的应用程序实例因此我假设Helmet.js中间件以相同的方式运行,但我并非100%肯定。任何人都可以确认这是否是预期的行为?

1 个答案:

答案 0 :(得分:2)

你对所说的一切都是正确的。

听起来你正在做之类的事情这个:

var express = require('express')

var mainApp = express()
var miniAppA = express()
var miniAppB = express()

mainApp.use('/a', miniAppA)
mainApp.use('/b', miniAppB)

mainApp.listen(3000)

这是一种可行的方法,但正如您所见,在子应用中会覆盖标题。

您可以使用Express 4的路由器功能来缓解此问题。您可以使用express(),而无需使用express.Router()创建新的迷你应用。这些是具有较少功能的Express应用程序(例如,它们不以相同的方式设置标题)。

这样的事情可能会解决您的问题:

var express = require('express')

var mainApp = express()
var miniAppA = express.Router()
var miniAppB = express.Router()

mainApp.use('/a', miniAppA)
mainApp.use('/b', miniAppB)

mainApp.listen(3000)