имеет ли значение, где я размещаю приложение.используйте(шлем… в приложении.используйте инструкции?

#node.js #express #iframe #clickjacking #helmet.js

Вопрос:

У меня есть node.js приложение, в котором я использую несколько операторов app.use. Я хочу включить app.use(helmet.frameguard({ action: 'deny' })); строку для предотвращения взлома, запретив моему сайту появляться в iframes, и я хотел спросить, имеет ли значение, где я размещаю эту строку в порядке инструкций app.use? Нужно ли мне размещать его в определенном месте среди всех других операторов app.use (например app.use(cookie-parser()); )

Ответ №1:

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

Просто убедитесь, что вы должны поместить его выше инициализации маршрута (так как, если он переходит на маршруты, возможно, вы возвращаете ответ функции только оттуда, поэтому он не перейдет к следующему промежуточному программному обеспечению, так как ответ уже отправлен). Можно вставить его выше или ниже анализатора файлов cookie.

Ответ №2:

Резюме: Я рекомендую поставить helmet() на первое место.

Сопровождающий шлема здесь. Это скорее прямой вопрос, чем вопрос о шлеме.

Экспресс-приложения последовательно запускают свое промежуточное программное обеспечение. Например foo , bar для каждого запроса будет выводиться следующее:

 function fooMiddleware(req, res, next) {
  console.log("foo");
  next();
}

function barMiddleware(req, res, next) {
  console.log("bar");
  next();
}

app.use(fooMiddleware);
app.use(barMiddleware);

// ...
 

В качестве альтернативы, это приведет к печати bar , затем foo :

 app.use(barMiddleware);
app.use(fooMiddleware);
 

Поэтому, если вы хотите, чтобы заголовки шлема применялись ко всем ответам, важно поставить их на первое место.

Например, это установит заголовки шлема для каждого запроса:

 const app = express();

app.use(helmet());

// ...
 

Но это может быть не так, потому что промежуточное программное обеспечение статического файла может добраться до него первым:

 const app = express();

app.use(express.static("./static_files"));

app.use(helmet());

// ...
 

Стоит отметить, что обработчики маршрутов (например app.get('/foo') ) концептуально очень похожи на промежуточное программное обеспечение. Эти два фрагмента кода почти одинаковы (хотя первый следует использовать в реальном приложении).:

 app.get("/foo", (req, res) => {
  res.send("Hello world!");
});
 
 app.use((req, res, next) => {
  if (req.method === "GET" amp;amp; req.url === "/foo") {
    res.send("Hello world!");
  } else {
    next();
  }
});