我正在尝试使用HTTPS和Express编写一个简单的NodeJS HTTPS Web服务器,该服务器具有可配置的Content-Security-Policy。
我尝试在服务器响应对象中设置Content-Security-Policy头属性,但始终只发送“default-src'self'”。似乎HTTPS模块会覆盖我指定的任何内容。
我也试过使用helmet-csp npm包也没有成功。
这是我的代码片段:
var app = express();
var sslOptions = {
cert: fs.readFileSync(ourPath + "/certs/server.crt"),
key: fs.readFileSync(ourPath + "/certs/server.pem")
};
var httpsServer = https.createServer(sslOptions, app);
var server = httpsServer.listen(secPort /*443*/, function () {
console.log('HTTPS Server listening at port %d', secPort);
});
// Trap the incoming request, and preset the CSP in the response header
server.on('request',(req,res)=>{
res.setHeader("Content-Security-policy","* 'inline-eval';");
});
您只需要在HTTP标头中设置它,而不是HTML。这是一个带有静态服务器的express 4的工作示例:
var express = require('express');
var app = express();
app.use(function(req, res, next) {
res.setHeader("Content-Security-Policy", "script-src 'self' https://apis.google.com");
return next();
});
app.use(express.static(__dirname + '/'));
app.listen(process.env.PORT || 3000);
如果您想了解有关CSP的更多信息,这是一篇很好的文章:qazxsw poi
希望有所帮助!