Express.js - Helmet.js и другое промежуточное ПО, а также смонтированные приложения?

В недавнем учебном проекте я использую три приложения Express.js, чтобы разделить проект на более управляемые части.

Одно приложение является "основным" приложением, которое прослушивает соединения. Два других монтируются на определенных маршрутах в основном приложении.

Достаточно ли позвонить 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 ответ

Решение

Вы правы во всем, что вы сказали.

Похоже, вы делаете что-то вроде этого:

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)
Другие вопросы по тегам