无需登录 数据私有 本地保存

Reporting API 错误仪表板 - CSP/拦截报告收集

13
0
0
0

Reporting API 错误仪表板

实时监控 CSP 违规、浏览器拦截、弃用警告等报告

15
总报告数
所有类型报告
5
今日报告
最近24小时
9
CSP 违规
含 enforce / report-only
6
拦截 / 其他
干预·弃用·崩溃
违规类型分布 点击柱体筛选
筛选与搜索
报告列表 (15 条)
# 时间 类型 违规指令 / 报告类型 被阻止资源 / 详情 处置 操作

暂无匹配的报告

尝试调整筛选条件或点击"模拟报告"生成测试数据

显示 1-10 / 共 15 条
端点配置指南
1. 设置 HTTP 响应头
# 定义报告端点
Report-To: {"group":"default","max_age":10886400,"endpoints":[{"url":"https://your-domain.com/report-endpoint"}]}
# CSP 中使用 report-to
Content-Security-Policy: ...; report-to default; report-uri /report-endpoint;
2. Nginx 示例配置
# 添加响应头
add_header Report-To '{"group":"default","max_age":10886400,"endpoints":[{"url":"/api/reports"}]}';
add_header Content-Security-Policy "default-src 'self'; report-to default; report-uri /api/reports;";
3. Node.js / Express 端点
// 接收报告端点
app.post('/api/reports', express.json({type: 'application/reports+json'}), (req, res) => {
  // req.body 包含报告数组
  console.log('收到报告:', req.body);
  res.status(204).send();
});
4. CSP Report-Only 模式
# 仅报告不拦截,用于测试策略
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'report-sample'; report-to default;
常见问题与知识点

Reporting API 是浏览器提供的一套标准化报告机制,允许网站收集各类浏览器生成的报告——包括 CSP 违规、浏览器干预(intervention)、API 弃用警告(deprecation)、崩溃报告等。它通过 Report-To HTTP 响应头配置端点,取代了旧版 CSP 中仅用于违规报告的 report-uri 指令。

简单来说,Reporting API 是更通用、更强大的报告基础设施,CSP 违规报告只是它能处理的报告类型之一。使用 Reporting API,你可以用一个端点统一收集多种安全与运行状况报告,便于集中分析。

report-uri 是 CSP Level 2 引入的旧指令,仅用于 CSP 违规报告,目前仍被广泛支持但已被标记为废弃。

report-to 是 CSP Level 3 引入的新指令,依赖 Reporting API 配置,支持所有类型的报告(CSP违规、干预、弃用、崩溃等),是推荐的现代方案。

最佳实践:同时配置两者以确保兼容性——现代浏览器使用 report-to,旧版浏览器回退到 report-uri。本仪表板可同时展示两种方式收集的报告。

  • document-uri:发生违规的页面 URL。
  • violated-directive:被违反的 CSP 指令(如 script-src 'self')。
  • blocked-uri:被阻止加载的资源 URL。
  • dispositionenforce(强制执行并阻止)或 report(仅报告,Report-Only 模式)。
  • script-sample:内联脚本的前 40 个字符(需配置 'report-sample')。
  • source-file / line-number / column-number:违规代码的源文件位置。
  • status-code:资源请求的 HTTP 状态码(如有)。

浏览器发送 Reporting API 报告时通常不携带 Cookie,因此 CSRF 风险相对较低。但仍需注意:

  • 限制 Content-Type:仅接受 application/reports+json 格式。
  • 速率限制:对端点实施请求频率限制,防止被大量虚假报告淹没。
  • 验证来源:检查 Origin 头是否来自你的域名。
  • 使用 CSRF Token:虽然浏览器报告不携带Cookie,但如果端点同时处理用户请求,仍建议加入 CSRF 防护。
  • 日志监控:定期审查报告数据,识别异常模式。

当浏览器主动干预页面行为时(例如阻止自动播放音视频、阻止弹出窗口、阻止不安全的操作),会生成干预报告。这些报告帮助开发者了解浏览器在哪些场景下限制了页面功能,从而优化用户体验。干预报告通过 Reporting API 的 intervention 类型发送。

使用 Content-Security-Policy-Report-Only 响应头代替 Content-Security-Policy,浏览器将仅发送报告而不实际阻止任何资源。这样你可以:

  1. 收集真实用户环境下的违规数据。
  2. 识别哪些第三方脚本/资源会被策略阻止。
  3. 逐步调整策略直到违规数降至可接受水平。
  4. 最后将策略切换为 Content-Security-Policy(enforce 模式)。

本仪表板同时展示 enforce 和 report-only 两种报告,方便对比分析。

Reporting API v2 简化了配置格式,使用 Reporting-Endpoints 响应头:

Reporting-Endpoints: default="https://example.com/reports", crash="https://example.com/crash-reports"

v2 版本更简洁,支持命名端点,且不再需要 Report-To 的 JSON 格式。目前主流浏览器正在逐步支持 v2,建议同时配置 v1 和 v2 以确保最大兼容性。

通过分析报告仪表板中的数据,你可以:

  • 识别高频违规:快速定位哪些页面/资源触发最多违规。
  • 发现第三方脚本:了解哪些外部脚本被 CSP 阻止,评估是否需要加入白名单。
  • 检测内联代码:通过 script-sample 定位需要重构的内联脚本。
  • 监控弃用 API:及时发现代码中使用了即将被移除的浏览器 API。
  • 追踪崩溃:收集页面崩溃报告,提升稳定性。
  • 趋势分析:观察违规数量随时间的变化,评估策略调整效果。