CSP使用严格设置
文章目录
- 说明
- 示例
说明
日期:2025年6月2日。
内容安全政策(MPS)是一个额外的安全层,有助于检测和缓解某些类型的攻击。包括(但不限于)跨站点脚本(XSS)和数据注入攻击。这些攻击用于从数据盗窃到网站破坏或恶意软件分发的各种行为。CPS提供了一组标准的HTTP标头,允许网站所有者声明应允许浏览器在该页面上加载的经批准的内容来源-涵盖的类型包括JavaScript、CSS、HTML框架、字体、图像和可嵌入对象,例如Java小程序、Firefox、音频和视频文件。
不支持CSP的旧版浏览器会自动忽略CSP。
CSP的严格设置只是一个基础,要针对自己的需求来开放设置,但开放的同时,要对需求做好安全措施。
示例
日期:2025年6月2日。
操作系统:ubuntu server v24.04.2 amd64。
应用:
- node.js v22.15.1
- npm v11.4.1
- express(node.js的模块) v5.1.0
增加对express的配置。
// 设置 CSP 中间件
app.use((req, res, next) => {const cspPolicy = "default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; form-action 'self'; frame-ancestors 'none'; report-to csp-endpoint";res.setHeader('Content-Security-Policy', cspPolicy);res.setHeader('Report-To', '{"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"/csp-violation-report"}],"include_subdomains":true}');next();
});var reportCount = 0;
// 处理 CSP 违规报告,创建报告接收路由
app.post('/csp-violation-report', express.json({ type: 'application/csp-report' }), (req, res) => { reportCount++;const report = req.body['csp-report']; // 记录违规报告console.log('CSP 违规报告:', {documentURI: report.documentURI,violatedDirective: report.violatedDirective,blockedURI: report.blockedURI,originalPolicy: report.originalPolicy});res.status(204).end();
});
// 监控报告率
setInterval(() => { if (reportCount > 1000) {// 发送告警:可能遭受攻击或策略配置错误console.log(`高频率CSP违规: ${reportFrequency}/小时`);}reportCount= reportCount/ 2; //上一次监测时的报告数量,将一定程度影响下一次检测,且影响度不断降低。
}, 60*60 * 1000); // 每小时检查一次