我有一个 API,用于收集内容安全策略 (CSP) 违规报告。现在 report-uri
已被 report-to
指令取代,我计划使用它。但是,我无法获取跨源报告。我尝试过使用 cors
包。但仍然无法获取报告。
我在客户端源(example-1.com)上设置的 header 是:
res.setHeader(
'Report-To',
'{"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url": "https://example-2.com/csp-report"}]}'
);
在 CSP 中,report-to
值设置为 csp-endpoint
(这在同一源上工作)
在服务器端(example-2.com),存在以下代码(Express.js 服务器):
app.use(
'/csp-report',
express.json({
type: [
'application/json',
'application/csp-report',
'application/reports+json'
]
})
);
app.use('/csp-report', cors()) // Using cors npm package
app.post('/csp-report', (req, res) => {
res.setHeader('Access-Control-Expose-Headers', '*, Authorization');
console.log(req.headers);
console.log('CSP Violation Timestamp : ' + new Date().getTime());
console.log(req.body);
res.status(204).send();
});
我没有收到来自跨源的报告。请认为我是一个初学者,并让我知道我在哪里犯了错误。谢谢。
最佳答案
您的代码似乎是正确的,但目前 Chrome/Chromium 的 Reporting API CORS 实现中存在一个错误,这可能会导致您出现问题。请参阅Chromium issue #1152867 。该错误的要点是,此处使用的 CORS 实现要求响应中存在 Access-Control-Allow-Methods: POST
header ,这不符合 CORS 规范,如 POST
是一种“简单”的方法。
如果您能够修改服务器上的 CORS 实现,则可以将其修改为始终在 OPTIONS
上包含 Access-Control-Allow-Methods: POST
header > 响应,这应该可以解决该错误。
否则,您将不得不不使用跨域请求进行报告,或者退回到仅使用已弃用的 Report-Uri
指令,直到发布修复程序。后者应该不是什么太大的问题,因为 Firefox 和 Safari 还不支持新的 Report-To
header 。
关于node.js - 如何发送 Reporting API 报告跨域 (Report-To) header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70255916/