我正在创建示例Express应用程序来演示Content-Security-Policy(CSP)头并试图使用helmet-csp。在单个路径上实现头盔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头:
内容安全-政策:帧-src的 '无'
在/frameable
路线,我想覆盖此CSP标题是:
内容安全-政策:帧的src“自我”
每当我需要/想自定义页眉通过头盔-CSP在每个路由设置,我是否需要手动覆盖它们各自app.get
内用线,如:
response.setHeader('Content-Security-Policy', "frame-src 'self'");
还是有办法通过头盔-CSP本身做到这一点?
这是直接修改头 - 这很容易做(见我的问题的结束);我很好奇,如果有可能通过中间件本身在每个路由的基础上做到这一点。在案例中,手动设置一个小型CSP头并不是世界末日,但是当多个头有多个选项并且它们是在多个路径上自定义时 - 使用helmet-csp会更友好'而不是每次手动定义它们。 – newfurniturey
链接中间件允许一些重用 – jasonpenny
哦,这太好了 - 谢谢!知道这是一个中间件类型的东西(而不是绑定到库),这真是太棒了,它将在未来帮助很多。谢谢(^_^) – newfurniturey