CSPViolationReport: disposition property
Baseline
2026
Newly available
Since March 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Thuộc tính disposition của từ điển CSPViolationReport cho biết liệu user agent được cấu hình để thực thi các vi phạm Chính sách bảo mật nội dung (CSP) hay chỉ báo cáo chúng.
Giá trị
Các giá trị có thể có:
"enforce"-
Chính sách được thực thi và yêu cầu tài nguyên bị chặn. Được dùng cho các vi phạm của chính sách được đặt bằng
Content-Security-Policy. "report"-
Vi phạm được báo cáo nhưng yêu cầu tài nguyên không bị chặn. Được dùng cho các vi phạm của chính sách được đặt bằng
Content-Security-Policy-Report-Only.
Ví dụ
>Vi phạm CSP script nội tuyến hiển thị disposition
Ví dụ này kích hoạt vi phạm CSP bằng một script nội tuyến và báo cáo vi phạm bằng ReportingObserver. disposition được ghi lại.
HTML
Tệp HTML bên dưới sử dụng phần tử <meta> để đặt default-src của Content-Security-Policy thành self, cho phép tải script và các tài nguyên khác từ cùng miền, nhưng không cho phép thực thi script nội tuyến. Tài liệu cũng bao gồm một script nội tuyến, sẽ kích hoạt vi phạm CSP.
<!doctype html>
<html lang="vi">
<head>
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; report-to csp-endpoint" />
<meta
http-equiv="Reporting-Endpoints"
content="csp-endpoint='https://example.com/csp-reports'" />
<script src="main.js"></script>
<title>CSP: Violation due to inline script</title>
</head>
<body>
<h1>CSP: Violation due to inline script</h1>
<script>
const int = 4;
</script>
</body>
</html>
JavaScript (main.js)
Tài liệu trên cũng tải script bên ngoài main.js, được hiển thị bên dưới. Vì được tải từ cùng miền với HTML, nó không bị chặn bởi CSP.
Script tạo một ReportingObserver mới để quan sát các báo cáo vi phạm nội dung thuộc loại "csp-violation". Mỗi lần hàm callback được gọi, chúng ta lấy nội dung của mục đầu tiên trong mảng báo cáo và sử dụng nó để ghi ra tệp, dòng và cột của vi phạm vào console.
// main.js
const observer = new ReportingObserver(
(reports, observer) => {
const cspViolationBody = reports[0].body;
console.log(`disposition: ${cspViolationBody.disposition}`);
// Ví dụ: "enforce"
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
Lưu ý rằng mặc dù có thể có nhiều báo cáo trong mảng trả về, để ngắn gọn chúng ta chỉ ghi các giá trị của phần tử đầu tiên.
Kết quả
Nếu phục vụ mã trên, đầu ra log sẽ là:
disposition: enforce
Note:
Nếu Content-Security-Policy-Reporting-Only được bật, disposition sẽ là report. Tuy nhiên, lưu ý rằng Content-Security-Policy-Reporting-Only phải được phục vụ qua header: nó không thể được đặt trong phần tử <meta> như chúng ta đã làm ở trên.
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| Content Security Policy Level 3> # reporting> |