我正在创建一个示例 Express 应用程序来演示 Content-Security-Policy (CSP) 标头,并尝试使用helmet-csp。
头盔 csp 的所有文档都显示它用作标准的第三方中间件app.use(csp({ ... }))
- 这会将 CSP 标头添加到我的应用程序中的每个路由,但我想在各个路由上对其进行自定义。
示例应用
var express = require('express');
var http = require('http');
var csp = require('helmet-csp');
var app = express();
app.use(csp({
directives: {
frameSrc: ["'none'"]
}
}));
app.get('/', (request, response) => {
response.send('hi, :wave: =]');
});
app.get('/frameable', (request, response) => {
response.send('you can frame me!');
});
http.createServer(app).listen(80, (err) => {
if (err) {
return console.log('error', err);
}
});
有了上述内容,每条路由都会收到 CSP 标头:
内容安全策略:frame-src 'none'
在/frameable
路由中,我希望将此 CSP 标头覆盖为:
内容安全策略:frame-src 'self'
每当我需要/想要在每个路由的基础上自定义由helmet-csp 设置的标头时,我是否需要在每个路由中手动覆盖它们app.get
,例如:
response.setHeader('Content-Security-Policy', "frame-src 'self'");
或者有没有办法通过helmet-csp本身来做到这一点?