我把 app.use(头盔...放在 app.use 语句中的什么地方重要吗?
does it matter where I place app.use(helmet... within the app.use statements?
我有一个 node.js 应用程序,我在其中使用多个 app.use 语句。我想包含 app.use(helmet.frameguard({ action: 'deny' }));
行以通过阻止我的网站出现在 iframe 中来防止点击劫持,我想问一下我按照 app.use 语句的顺序放置此行是否重要?我是否需要将它放在所有其他 app.use 语句中的特定位置(例如 app.use(cookie-parser());
)
我的意思是,所有中间件 运行 逐行或者您可以同步说。
只要确保你应该把它放在路由初始化之上(因为如果它去路由,你可能只从那里返回函数响应,所以它不会去下一个中间件,因为响应已经发送).可以将其粘贴到 cookie-parser 的上方或下方。
总结:建议先放helmet()
这里是头盔维护者。这更像是一个 Express 问题而不是 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);
因此,如果您希望将头盔的 headers 应用于所有响应,请务必将它们放在第一位。
例如,这将为每个请求设置头盔 headers:
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" && req.url === "/foo") {
res.send("Hello world!");
} else {
next();
}
});
我有一个 node.js 应用程序,我在其中使用多个 app.use 语句。我想包含 app.use(helmet.frameguard({ action: 'deny' }));
行以通过阻止我的网站出现在 iframe 中来防止点击劫持,我想问一下我按照 app.use 语句的顺序放置此行是否重要?我是否需要将它放在所有其他 app.use 语句中的特定位置(例如 app.use(cookie-parser());
)
我的意思是,所有中间件 运行 逐行或者您可以同步说。
只要确保你应该把它放在路由初始化之上(因为如果它去路由,你可能只从那里返回函数响应,所以它不会去下一个中间件,因为响应已经发送).可以将其粘贴到 cookie-parser 的上方或下方。
总结:建议先放helmet()
这里是头盔维护者。这更像是一个 Express 问题而不是 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);
因此,如果您希望将头盔的 headers 应用于所有响应,请务必将它们放在第一位。
例如,这将为每个请求设置头盔 headers:
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" && req.url === "/foo") {
res.send("Hello world!");
} else {
next();
}
});