Tìm hiểu thêm về các tiêu đề có thể giữ an toàn cho trang web của bạn và nhanh chóng tra cứu các thông tin quan trọng nhất.
Bài viết này liệt kê các tiêu đề bảo mật quan trọng nhất mà bạn có thể dùng để bảo vệ trang web của bạn. Hãy sử dụng Gemini để nắm được các tính năng bảo mật dựa trên nền tảng web, tìm hiểu cách triển khai chúng trên trang web của bạn và để tham khảo khi bạn cần lời nhắc.
- Tiêu đề bảo mật nên dùng cho các trang web xử lý dữ liệu nhạy cảm của người dùng:
- Chính sách bảo mật nội dung (CSP)
- Kiểu tin cậy
- Tiêu đề bảo mật nên dùng cho tất cả trang web:
- X-Content-Type-Options
- X-Frame-Options
- Chính sách về tài nguyên trên nhiều nguồn gốc (CORP)
- Chính sách về công cụ mở trên nhiều nguồn gốc (COOP)
- Bảo mật truyền tải nghiêm ngặt HTTP (HSTS)
- Tiêu đề bảo mật dành cho những trang web có các tính năng nâng cao:
- Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS)
- Chính sách về trình nhúng trên nhiều nguồn gốc (COEP)
Trước khi tìm hiểu kỹ về các tiêu đề bảo mật, hãy tìm hiểu về các mối đe doạ đã biết trên web và lý do bạn nên sử dụng các tiêu đề bảo mật này.
Bảo vệ trang web của bạn khỏi các lỗ hổng bảo mật truyền dữ liệu
Lỗ hổng chèn dữ liệu phát sinh khi dữ liệu không đáng tin cậy do có thể ảnh hưởng đến hành vi của ứng dụng và thường dẫn đến việc thực thi các tập lệnh do kẻ tấn công kiểm soát. Lỗ hổng bảo mật phổ biến nhất do quá trình chèn các lỗi xảy ra nhiều trang web viết tập lệnh (XSS) trong nhiều hình thức khác nhau, bao gồm phản ánh XSS, XSS được lưu trữ, Dựa trên DOM XSS và các biến thể khác.
Lỗ hổng bảo mật XSS thường có thể cho phép kẻ tấn công truy cập đầy đủ vào dữ liệu người dùng được xử lý bởi ứng dụng và bất kỳ thông tin nào khác được lưu trữ trong cùng một trang web máy chủ gốc.
Các biện pháp bảo vệ truyền thống chống lại thao tác chèn bao gồm sử dụng tính năng thoát tự động một cách nhất quán Hệ thống mẫu HTML, tránh sử dụng JavaScript nguy hiểm API và xử lý dữ liệu người dùng đúng cách bằng cách lưu trữ tệp tải lên trong một miền riêng biệt và dọn dẹp HTML do người dùng kiểm soát.
- Sử dụng Chính sách bảo mật nội dung (CSP) để kiểm soát những tập lệnh có thể được mà ứng dụng của bạn thực thi nhằm giảm thiểu rủi ro bị chèn.
- Sử dụng Các loại đáng tin cậy để thực thi quy trình dọn dẹp dữ liệu được chuyển vào các dữ liệu nguy hiểm API JavaScript.
- Sử dụng X-Content-Type-Options để ngăn trình duyệt hiểu sai các loại MIME của các tài nguyên trên trang web của bạn, điều này có thể dẫn đến thực thi tập lệnh.
Cách ly trang web của bạn khỏi các trang web khác
Tính mở của web cho phép các trang web tương tác với nhau theo cách có thể vi phạm các kỳ vọng về bảo mật của ứng dụng. Điều này bao gồm ngoài dự kiến đưa ra yêu cầu được xác thực hoặc nhúng dữ liệu từ một ứng dụng khác trong tài liệu của kẻ tấn công, cho phép kẻ tấn công sửa đổi hoặc đọc dữ liệu ứng dụng.
Sau đây là các lỗ hổng bảo mật phổ biến làm giảm khả năng cô lập web thủ thuật nhấp chuột, hoạt động trên nhiều trang web yêu cầu giả mạo (CSRF), nhiều trang web bao gồm tập lệnh (XSSI) và nhiều loại tập lệnh rò rỉ nhiều trang web.
- Sử dụng X-Frame-Options để ngăn tài liệu của bạn bị nhúng bởi trang web độc hại.
- Hãy sử dụng Chính sách về tài nguyên trên nhiều nguồn gốc (CORP) để ngăn trang web của bạn khỏi một trang web nhiều nguồn gốc.
- Sử dụng Chính sách về trình mở trên nhiều nguồn gốc (COOP) để bảo vệ trang web của bạn Windows khỏi các lượt tương tác của các trang web độc hại.
- Sử dụng tính năng Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS) để kiểm soát quyền truy cập vào trên trang web của bạn từ các tài liệu nhiều nguồn gốc.
Trang web hậu bóng ma Bạn nên đọc cuốn sách Phát triển nếu bạn quan tâm đến các tiêu đề này.
Xây dựng một trang web mạnh mẽ một cách an toàn
Spectre đặt mọi dữ liệu được tải
vào cùng một nhóm ngữ cảnh duyệt web có thể đọc được
mặc dù chính sách cùng nguồn gốc. Trình duyệt hạn chế tính năng
có thể khai thác lỗ hổng bảo mật này đằng sau một môi trường đặc biệt được gọi là
"tách biệt nhiều nguồn gốc". Với tính năng tách biệt nhiều nguồn gốc, bạn có thể
sử dụng các tính năng mạnh mẽ như SharedArrayBuffer
.
- Sử dụng Chính sách về trình nhúng trên nhiều nguồn gốc (COEP) cùng với COOP để bật tính năng tách biệt nhiều nguồn gốc.
Mã hoá lưu lượng truy cập vào trang web
Sự cố mã hoá xuất hiện khi một ứng dụng không mã hoá hoàn toàn dữ liệu trong phương tiện công cộng, cho phép kẻ tấn công nghe lén để biết các hoạt động tương tác của người dùng với ứng dụng.
Quá trình mã hoá không đầy đủ có thể phát sinh trong các trường hợp sau: không sử dụng HTTPS,
nội dung hỗn hợp, đặt cookie mà không có Secure
thuộc tính
(hoặc __Secure
tiền tố),
hoặc xác thực CORS chéo
.
- Sử dụng Bảo mật truyền tải nghiêm ngặt HTTP (HSTS) để đảm bảo an toàn phân phát thông qua HTTPS.
Chính sách bảo mật nội dung (CSP)
Tập lệnh trên nhiều trang web (XSS) là một cuộc tấn công nơi một lỗ hổng bảo mật trên trang web cho phép tập lệnh độc hại được chèn vào và thực thi.
Content-Security-Policy
cung cấp một lớp bổ sung để giảm thiểu các cuộc tấn công XSS bằng cách
hạn chế những tập lệnh có thể được trang thực thi.
Bạn nên bật CSP nghiêm ngặt bằng một trong các phương pháp sau:
- Nếu bạn kết xuất các trang HTML trên máy chủ, hãy sử dụng CSP nghiêm ngặt dựa trên số chỉ dùng một lần.
- Nếu HTML của bạn phải được phân phát theo phương thức tĩnh hoặc lưu trong bộ nhớ đệm, ví dụ: ứng dụng trang đơn, hãy sử dụng CSP nghiêm ngặt dựa trên hàm băm.
Ví dụ về cách sử dụng: CSP dựa trên số chỉ dùng một lần
Content-Security-Policy:
script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
object-src 'none';
base-uri 'none';
Cách sử dụng đề xuất
1. Sử dụng CSP nghiêm ngặt dựa trên số chỉ dùng một lần {: #nonce-based-csp}
Nếu bạn kết xuất các trang HTML trên máy chủ, hãy sử dụng CSP nghiêm ngặt dựa trên số chỉ dùng một lần.
Tạo giá trị số chỉ dùng một lần của tập lệnh mới cho mọi yêu cầu ở phía máy chủ và đặt tiêu đề sau:
tệp cấu hình máy chủ
Content-Security-Policy: script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline'; object-src 'none'; base-uri 'none';
Trong HTML, để tải tập lệnh, hãy đặt thuộc tính nonce
của tất cả thẻ
Các thẻ <script>
đến cùng một chuỗi {RANDOM1}
.
index.html
<script nonce="{RANDOM1}" src="https://example.com/script1.js"></script> <script nonce="{RANDOM1}"> // Inline scripts can be used with the <code>nonce</code> attribute. </script>
Google Photos là một CSP nghiêm ngặt dựa trên số chỉ dùng một lần tốt ví dụ: Sử dụng Công cụ cho nhà phát triển để xem cách sử dụng.
2. Sử dụng CSP nghiêm ngặt dựa trên hàm băm {: #hash-based-csp}
Nếu HTML của bạn phải được phân phát theo phương thức tĩnh hoặc được lưu vào bộ nhớ đệm, ví dụ: tạo ứng dụng trang đơn, hãy sử dụng CSP nghiêm ngặt dựa trên hàm băm.
tệp cấu hình máy chủ
Content-Security-Policy: script-src 'sha256-{HASH1}' 'sha256-{HASH2}' 'strict-dynamic' https: 'unsafe-inline'; object-src 'none'; base-uri 'none';
Trong HTML, bạn sẽ cần phải nội tuyến tập lệnh của mình để áp dụng hàm băm dựa trên hàm băm vì hầu hết các trình duyệt không hỗ trợ băm dữ liệu bên ngoài tập lệnh.
index.html
<script> ...// your script1, inlined </script> <script> ...// your script2, inlined </script>
Để tải tập lệnh bên ngoài, hãy đọc phần "Tải tập lệnh được nguồn một cách linh động" dưới Tuỳ chọn B: Tiêu đề phản hồi của CSP dựa trên hàm băm.
Công cụ đánh giá CSP là một công cụ hiệu quả để đánh giá CSP của bạn, đồng thời là một ví dụ phù hợp về CSP nghiêm ngặt dựa trên số chỉ dùng một lần. Sử dụng Công cụ cho nhà phát triển để xem cách sử dụng.
Các trình duyệt được hỗ trợ
Những điều khác cần lưu ý về CSP
frame-ancestors
bảo vệ trang web của bạn khỏi bị tấn công nhấp chuột—một rủi ro phát sinh nếu bạn cho phép các trang web không đáng tin cậy để nhúng video của bạn. Nếu muốn giải pháp đơn giản hơn, bạn có thể sử dụngX-Frame-Options
để chặn quá trình tải, nhưngframe-ancestors
sẽ cung cấp cho bạn một cấu hình nâng cao để chỉ cho phép các nguồn gốc cụ thể làm người nhúng.- Bạn có thể đã sử dụng CSP để đảm bảo rằng tất cả tài nguyên trên trang web của mình được tải qua HTTPS. Thông tin này có trở nên ít liên quan hơn: ngày nay, hầu hết các trình duyệt đều chặn nội dung hỗn hợp.
- Bạn cũng có thể thiết lập CSP trong chế độ chỉ báo cáo chế độ xem.
- Nếu không thể đặt CSP làm tiêu đề phía máy chủ, bạn cũng có thể đặt CSP đó làm thẻ meta . Lưu ý rằng bạn không thể sử dụng chế độ chỉ báo cáo cho thẻ meta (mặc dù điều này có thể thay đổi).
Tìm hiểu thêm
Các loại dữ liệu đáng tin cậy
Dựa trên DOM
XSS là một
cuộc tấn công dữ liệu độc hại được truyền vào bồn lưu trữ dữ liệu có hỗ trợ mã động
chẳng hạn như eval()
hoặc .innerHTML
.
Loại đáng tin cậy cung cấp công cụ viết, đánh giá tính bảo mật và duy trì không có DOM XSS. Chúng có thể được bật thông qua CSP và tạo Mã JavaScript bảo mật theo mặc định bằng cách giới hạn các API web nguy hiểm chỉ chấp nhận một đối tượng đặc biệt—Loại đáng tin cậy.
Để tạo các đối tượng này, bạn có thể xác định các chính sách bảo mật mà bạn có thể đảm bảo các quy tắc bảo mật (chẳng hạn như thoát hoặc dọn dẹp) được áp dụng một cách nhất quán trước khi dữ liệu được ghi vào DOM. Khi đó, các chính sách này là nơi duy nhất có khả năng tạo ra DOM XSS.
Ví dụ về cách sử dụng
Content-Security-Policy: require-trusted-types-for 'script'
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/\</g, '<').replace(/>/g, '>');
}
});
}
// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.
// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped; // '&lt;img src=x onerror=alert(1)&gt;'
Cách sử dụng đề xuất
-
Thực thi các Loại đáng tin cậy đối với bồn lưu trữ DOM nguy hiểm Tiêu đề CSP và Các loại đáng tin cậy:
Content-Security-Policy: require-trusted-types-for 'script'
Hiện tại,
'script'
là giá trị duy nhất được chấp nhận cho lệnhrequire-trusted-types-for
.Tất nhiên, bạn có thể kết hợp các Loại đáng tin cậy với các lệnh CSP khác:
Hợp nhất CSP dựa trên số chỉ dùng một lần ở trên với các Loại đáng tin cậy:
Content-Security-Policy:
script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
<aside class="note"><b>Lưu ý: </b> Bạn có thể giới hạn các tên chính sách về Loại đáng tin cậy bằng cách đặt thêm một <code>các loại đáng tin cậy</code> (ví dụ: <code>trusted-types myPolicy</code>). Tuy nhiên, đây không phải là yêu cầu bắt buộc. </aside>
-
Xác định chính sách
Chính sách:
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/\/g, '>');
}
});
}
-
Áp dụng chính sách
Sử dụng chính sách khi ghi dữ liệu vào DOM:
// Assignment of raw strings are blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.</p>
<p>// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('<img src="x" onerror="alert(1)">');
el.innerHTML = escaped; // '<img src=x onerror=alert(1)>'
Với require-trusted-types-for 'script'
, việc sử dụng loại đáng tin cậy là
. Việc sử dụng bất kỳ API DOM nguy hiểm nào có chuỗi cũng sẽ dẫn đến
.
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
- Ngăn chặn lỗ hổng bảo mật tập lệnh trên nhiều trang web dựa trên DOM bằng Trusted
Loại
- CSP: required-trust-types-for – HTTP |
Mã nhận dạng cho nhà quảng cáo (MDN)
- CSP: loại đáng tin cậy – HTTP |
Mã nhận dạng cho nhà quảng cáo (MDN)
- Bản minh hoạ Loại đáng tin cậy – mở Trình kiểm tra Công cụ cho nhà phát triển và xem
chuyện gì đang xảy ra vậy
X-Content-Type-Options
Khi tài liệu HTML độc hại được phân phát từ miền của bạn (ví dụ: nếu một hình ảnh được tải lên một dịch vụ ảnh chứa đánh dấu HTML hợp lệ), một số trình duyệt sẽ coi tài liệu này là một tài liệu đang hoạt động và cho phép thực thi các tập lệnh trong ngữ cảnh của ứng dụng, dẫn đến tình trạng viết tập lệnh trên nhiều trang web lỗi.
X-Content-Type-Options: nosniff
ngăn chặn điều này bằng cách hướng dẫn trình duyệt rằng
loại MIME được đặt trong
Tiêu đề Content-Type
cho một phản hồi đã cho là chính xác. Tiêu đề này là
nên dùng cho mọi tài nguyên của bạn.
Ví dụ về cách sử dụng
X-Content-Type-Options: nosniff
Cách sử dụng đề xuất
Nên dùng X-Content-Type-Options: nosniff
cho mọi tài nguyên phân phát từ
máy chủ của bạn cùng với tiêu đề Content-Type
chính xác.
Tiêu đề mẫu được gửi cùng với HTML của tài liệu
X-Content-Type-Options: nosniff Content-Type: text/html; charset=utf-8
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
X-Frame-Options
Nếu một trang web độc hại có thể nhúng trang web của bạn dưới dạng iframe, thì thao tác này có thể cho phép để kẻ tấn công gọi ra các hành động không mong muốn của người dùng bằng thủ đoạn tấn công bằng nhấp chuột. Ngoài ra, trong một số trường hợp loại bóng ma tấn công các trang web độc hại có thể tìm hiểu về nội dung của tài liệu được nhúng.
X-Frame-Options
cho biết liệu trình duyệt có được phép kết xuất hay không
một trang trong <frame>
, <iframe>
, <embed>
hoặc <object>
. Tất cả tài liệu
bạn nên gửi tiêu đề này để cho biết liệu chúng cho phép
được nhúng bởi các tài liệu khác.
Ví dụ về cách sử dụng
X-Frame-Options: DENY
Cách sử dụng đề xuất
Tất cả các tài liệu không được thiết kế để nhúng phải sử dụng tiêu đề X-Frame-Options
.
Bạn có thể thử các cấu hình sau ảnh hưởng như thế nào đến việc tải iframe trên trang này
bản minh hoạ. Thay đổi X-Frame-Options
trình đơn thả xuống rồi nhấp vào nút Tải lại iframe.
Bảo vệ trang web của bạn không bị nhúng bởi bất kỳ trang web nào khác
Không cho phép nhúng bởi bất kỳ tài liệu nào khác.
X-Frame-Options: DENY
Bảo vệ trang web của bạn không bị nhúng bởi bất kỳ trang web nhiều nguồn gốc nào
Chỉ cho phép nhúng trong các tài liệu có cùng nguồn gốc.
X-Frame-Options: SAMEORIGIN
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
Chính sách về tài nguyên trên nhiều nguồn gốc (CORP)
Kẻ tấn công có thể nhúng tài nguyên từ một nguồn khác, ví dụ từ trang web của bạn, để tìm hiểu thông tin về chúng bằng cách khai thác công cụ đặt giá thầu mở rộng trên nhiều trang web dựa trên nền tảng web rò rỉ.
Cross-Origin-Resource-Policy
giảm thiểu rủi ro này bằng cách chỉ ra tập hợp
các trang web khác. Tiêu đề sẽ nhận một trong ba giá trị sau:
same-origin
, same-site
và cross-origin
. Tất cả tài nguyên đều
được đề xuất gửi tiêu đề này để cho biết liệu chúng có cho phép được tải bằng
các trang web khác.
Ví dụ về cách sử dụng
Cross-Origin-Resource-Policy: same-origin
Cách sử dụng đề xuất
tất cả tài nguyên nên được phân phát cùng với một trong các định dạng sau ba tiêu đề.
Bạn có thể thử xem các cấu hình sau ảnh hưởng như thế nào đến việc tải tài nguyên trong
Cross-Origin-Embedder-Policy: require-corp
môi trường trên môi trường này
bản minh hoạ. Thay đổi
Cross-Origin-Resource-Policy trình đơn thả xuống và nhấp vào Tải lại
iframe hoặc nút Tải lại hình ảnh để xem hiệu ứng.
Cho phép tải tài nguyên cross-origin
Các dịch vụ tương tự như CDN nên áp dụng cross-origin
cho các tài nguyên
(vì các quảng cáo này thường được tải bởi các trang nhiều nguồn gốc), trừ phi các trang này đã được phân phát
thông qua CORS cũng có tác động tương tự.
Cross-Origin-Resource-Policy: cross-origin
Giới hạn tài nguyên được tải từ same-origin
Bạn chỉ nên áp dụng same-origin
cho các tài nguyên chỉ dùng để tải
theo các trang có cùng nguồn gốc. Bạn nên áp dụng chế độ này cho các tài nguyên bao gồm
thông tin về người dùng hoặc phản hồi của một API dự kiến được gọi
chỉ từ cùng một nguồn gốc.
Lưu ý rằng bạn vẫn có thể tải trực tiếp các tài nguyên có tiêu đề này, cho bằng cách chuyển đến URL trong một cửa sổ trình duyệt mới. Tài nguyên trên nhiều nguồn gốc Chính sách chỉ bảo vệ tài nguyên khỏi bị các trang web khác nhúng.
Cross-Origin-Resource-Policy: same-origin
Giới hạn tài nguyên được tải từ same-site
Bạn nên áp dụng same-site
cho các tài nguyên tương tự như trên
nhưng sẽ được tải bởi các miền con khác của trang web.
Cross-Origin-Resource-Policy: same-site
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
Chính sách về trình mở trên nhiều nguồn gốc (COOP)
Trang web của kẻ tấn công có thể mở một trang web khác trong cửa sổ bật lên để tìm hiểu thông tin về trang web đó bằng cách khai thác công cụ dựa trên web rò rỉ. Trong một số trường hợp, việc này cũng có thể cho phép khai thác các cuộc tấn công kênh bên dựa trên Spectre.
Tiêu đề Cross-Origin-Opener-Policy
cung cấp một cách tách biệt tài liệu
từ các cửa sổ trên nhiều nguồn gốc được mở thông qua window.open()
hoặc một đường liên kết có
target="_blank"
không có rel="noopener"
. Do đó, bất kỳ trình mở nào trên nhiều nguồn gốc
của tài liệu sẽ không tham chiếu đến tài liệu đó và sẽ không thể tương tác
với nó.
Ví dụ về cách sử dụng
Cross-Origin-Opener-Policy: same-origin-allow-popups
Cách sử dụng đề xuất
Bạn có thể thử xem các cấu hình sau ảnh hưởng như thế nào đến việc giao tiếp với cửa sổ bật lên nhiều nguồn gốc trên bản minh hoạ này. Thay đổi trình đơn thả xuống Cross-Origin-Opener-Policy cho cả hai tài liệu và cửa sổ bật lên, hãy nhấp vào nút Mở cửa sổ bật lên, sau đó nhấp vào Gửi postMessage để xem liệu tin nhắn đã thực sự được gửi hay chưa.
Tách biệt tài liệu khỏi các cửa sổ trên nhiều nguồn gốc
Thao tác đặt same-origin
sẽ tách riêng tài liệu khỏi nhiều nguồn gốc
cửa sổ tài liệu.
Cross-Origin-Opener-Policy: same-origin
Tách biệt tài liệu khỏi các cửa sổ trên nhiều nguồn gốc nhưng cho phép cửa sổ bật lên
Việc đặt same-origin-allow-popups
cho phép tài liệu giữ lại tệp tham chiếu đến
cửa sổ bật lên trừ phi các cửa sổ này đặt COOP bằng same-origin
hoặc
same-origin-allow-popups
. Tức là same-origin-allow-popups
vẫn có thể
bảo vệ tài liệu khỏi bị tham chiếu khi mở dưới dạng cửa sổ bật lên, nhưng
cho phép chiến dịch này giao tiếp với cửa sổ bật lên của riêng nó.
Cross-Origin-Opener-Policy: same-origin-allow-popups
Cho phép tham chiếu đến một tài liệu trong các cửa sổ trên nhiều nguồn gốc
unsafe-none
là giá trị mặc định, nhưng bạn có thể chỉ định rõ ràng rằng giá trị này
tài liệu này có thể được mở bằng một cửa sổ nhiều nguồn gốc và giữ quyền truy cập lẫn nhau.
Cross-Origin-Opener-Policy: unsafe-none
Các mẫu báo cáo không tương thích với COOP
Bạn có thể nhận được báo cáo khi COOP ngăn chặn các hoạt động tương tác giữa nhiều cửa sổ với API Báo cáo.
Cross-Origin-Opener-Policy: same-origin; report-to="coop"
COOP cũng hỗ trợ chế độ chỉ báo cáo để bạn có thể nhận báo cáo mà không cần thực sự chặn giao tiếp giữa các tài liệu nhiều nguồn gốc.
Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="coop"
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS)
Không giống như các mục khác trong bài viết này, Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS) không mà là một cơ chế của trình duyệt yêu cầu và cho phép truy cập vào trên nhiều nguồn gốc.
Theo mặc định, các trình duyệt sẽ thực thi chính sách cùng nguồn gốc để ngăn một trang web truy cập vào tài nguyên nhiều nguồn gốc. Ví dụ: khi một hình ảnh có nhiều nguồn gốc sẽ được tải, ngay cả khi hình ảnh hiển thị trên trang web trực quan, JavaScript trên trang không có quyền truy cập vào dữ liệu hình ảnh. Trình cung cấp tài nguyên có thể nới lỏng các hạn chế và cho phép các trang web khác đọc tài nguyên bằng cách chọn sử dụng CORS.
Ví dụ về cách sử dụng
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Trước khi tìm hiểu cách định cấu hình CORS, hữu ích để tìm hiểu sự khác biệt giữa các loại yêu cầu. Tuỳ thuộc vào thông tin chi tiết của yêu cầu, một yêu cầu sẽ được phân loại là yêu cầu đơn giản hoặc yêu cầu được kiểm tra trước.
Tiêu chí cho một yêu cầu đơn giản:
- Phương thức này là
GET
,HEAD
hoặcPOST
. - Tiêu đề tùy chỉnh chỉ bao gồm
Accept
,Accept-Language
,Content-Language
vàContent-Type
. Content-Type
mới làapplication/x-www-form-urlencoded
,multipart/form-data
hoặctext/plain
.
Mọi thứ khác được phân loại là yêu cầu đã chuyển trước. Để biết thêm thông tin, hãy xem bài viết Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS) – HTTP | MDN.
Cách sử dụng đề xuất
Yêu cầu đơn giản
Khi một yêu cầu đáp ứng các tiêu chí yêu cầu đơn giản, trình duyệt sẽ gửi
yêu cầu trên nhiều nguồn gốc có tiêu đề Origin
cho biết yêu cầu
máy chủ gốc.
Ví dụ về tiêu đề của yêu cầu
Get / HTTP/1.1 Origin: https://example.com
Tiêu đề phản hồi mẫu
Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://example.com
cho biết rằnghttps://example.com
có thể truy cập vào nội dung của phản hồi này. Tài nguyên ý nghĩa để mọi trang web đều đọc được đều có thể đặt tiêu đề này thành*
. Trong trường hợp đó, giá trị trình duyệt sẽ chỉ yêu cầu thực hiện yêu cầu mà không thông tin xác thực.Access-Control-Allow-Credentials: true
cho biết rằng những yêu cầu nào chuyển thông tin xác thực (cookie) được phép tải tài nguyên. Nếu không, các yêu cầu đã xác thực sẽ bị từ chối ngay cả khi nguồn gốc yêu cầu là có trong tiêu đềAccess-Control-Allow-Origin
.
Bạn có thể thử xem yêu cầu đơn giản đó ảnh hưởng như thế nào đến việc tải tài nguyên trong
Cross-Origin-Embedder-Policy: require-corp
môi trường trên môi trường này
bản minh hoạ. Nhấp vào
Hộp đánh dấu Chia sẻ tài nguyên trên nhiều nguồn gốc rồi nhấp vào Tải lại hình ảnh
để xem hiệu ứng.
Yêu cầu được chuyển vùng sẵn
Yêu cầu được kiểm tra trước có yêu cầu OPTIONS
để kiểm tra xem
bạn có thể gửi yêu cầu tiếp theo.
Ví dụ về tiêu đề của yêu cầu
OPTIONS / HTTP/1.1 Origin: https://example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: X-PINGOTHER, Content-Type
Access-Control-Request-Method: POST
cho phép thực hiện yêu cầu sau bằng phương thứcPOST
.Access-Control-Request-Headers: X-PINGOTHER, Content-Type
cho phép người yêu cầu đặt các tiêu đề HTTPX-PINGOTHER
vàContent-Type
trong phần tử yêu cầu tiếp theo.
Tiêu đề phản hồi mẫu
Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Credentials: true Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-PINGOTHER, Content-Type Access-Control-Max-Age: 86400
Access-Control-Allow-Methods: POST, GET, OPTIONS
cho biết rằng có thể thực hiện yêu cầu bằng phương thứcPOST
,GET
vàOPTIONS
.Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
biểu thị các bước tiếp theo yêu cầu có thể bao gồm các tiêu đềX-PINGOTHER
vàContent-Type
.Access-Control-Max-Age: 86400
cho biết rằng kết quả của quá trình kiểm tra có thể được lưu vào bộ nhớ đệm trong 86.400 giây.
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
Chính sách về trình nhúng trên nhiều nguồn gốc (COEP)
Để giảm khả năng Dựa trên bóng ma
tấn công đến
đánh cắp tài nguyên, các tính năng trên nhiều nguồn gốc như SharedArrayBuffer
hoặc
performance.measureUserAgentSpecificMemory()
bị tắt theo mặc định.
Cross-Origin-Embedder-Policy: require-corp
ngăn chặn tài liệu và worker
tải các tài nguyên trên nhiều nguồn gốc như hình ảnh, tập lệnh, biểu định kiểu, iframe và
các tệp khác trừ phi các tài nguyên này chọn tải một cách rõ ràng qua CORS
hoặc tiêu đề CORP. COEP có thể được kết hợp với Cross-Origin-Opener-Policy
để chọn sử dụng tính năng tách biệt nhiều nguồn gốc cho một tài liệu.
Sử dụng Cross-Origin-Embedder-Policy: require-corp
khi bạn muốn bật
cách ly nhiều nguồn gốc cho tài liệu của bạn.
Ví dụ về cách sử dụng
Cross-Origin-Embedder-Policy: require-corp
Ví dụ về cách sử dụng
COEP nhận một giá trị duy nhất là require-corp
. Bằng cách gửi tiêu đề này, bạn có thể
hướng dẫn trình duyệt chặn tải các tài nguyên không chọn tham gia qua
CORS hoặc CORP.
Bạn có thể thử xem các cấu hình sau ảnh hưởng như thế nào đến việc tải tài nguyên trên bản minh hoạ. Thay đổi trên trình đơn thả xuống Cross-Origin-Embedder-Policy, trong đó Trình đơn thả xuống Cross-Origin-Resource-Policy (Chính sách tài nguyên chéo), hộp đánh dấu Chỉ báo cáo, v.v. để xem chúng ảnh hưởng như thế nào đến việc tải tài nguyên. Ngoài ra, hãy mở điểm cuối báo cáo bản minh hoạ để xem liệu các tài nguyên bị chặn có đã báo cáo.
Bật tính năng tách biệt nhiều nguồn gốc
Bật tính năng tách biệt nhiều nguồn gốc bằng cách gửi
Cross-Origin-Embedder-Policy: require-corp
cùng với
Cross-Origin-Opener-Policy: same-origin
.
Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin
Báo cáo những tài nguyên không tương thích với COEP
Bạn có thể nhận được báo cáo về tài nguyên bị chặn do COEP gây ra thông qua phần Báo cáo API.
Cross-Origin-Embedder-Policy: require-corp; report-to="coep"
COEP cũng hỗ trợ chế độ chỉ báo cáo để bạn có thể nhận được báo cáo mà không cần thực sự chặn việc tải tài nguyên.
Cross-Origin-Embedder-Policy-Report-Only: require-corp; report-to="coep"
Các trình duyệt được hỗ trợ
Tìm hiểu thêm
Bảo mật truyền tải nghiêm ngặt HTTP (HSTS)
Hoạt động giao tiếp qua một kết nối HTTP thuần tuý không được mã hoá, khiến dữ liệu được chuyển cho những kẻ nghe trộm ở cấp độ mạng.
Tiêu đề Strict-Transport-Security
thông báo cho trình duyệt biết rằng nó sẽ không bao giờ được tải
trang web bằng cách sử dụng HTTP và chuyển sang dùng HTTPS. Sau khi bạn đặt thẻ này, trình duyệt sẽ sử dụng
HTTPS thay vì HTTP để truy cập vào miền mà không cần chuyển hướng trong một khoảng thời gian
được xác định trong tiêu đề.
Ví dụ về cách sử dụng
Strict-Transport-Security: max-age=31536000
Cách sử dụng đề xuất
Tất cả các trang web chuyển từ HTTP sang HTTPS đều phải phản hồi bằng
Strict-Transport-Security
khi nhận được yêu cầu có HTTP.
Strict-Transport-Security: max-age=31536000
Các trình duyệt được hỗ trợ