設定安全標頭
為協助提升網頁應用程式的安全性,請在邊緣設備或您的應用程式中設定 HTTP 安全標頭。 下面的 JavaScript 示例演示了如何實現這些標頭。 透過在傳輸過程中修改回應標頭,您可以在不更動後端應用程式的情況下,新增此類常見安全標頭所提供的防護措施。
- X XSS 保護 (X-XSS-Protection)
- 如果偵測到 XSS 攻擊,防止載入頁面。 瞭解更多例如:
"X-XSS-Protection": "1; mode=block",
- X-Frame-Options
-
有助於防止點擊劫持攻擊。 瞭解更多例如:
"X-Frame-Options": "DENY", - X 內容類型選項 (X-Content-Type-Options)
-
阻止瀏覽器從 MIME-sniffing 回應中擷取已宣告的內容類型。 瞭解更多例如:
"X-Content-Type-Options": "nosniff", - 權限-政策
-
讓您控制瀏覽器功能的存取。 例如,選擇退出群組聯盟學習 ( FLoC ):
"Permissions-Policy": "interest-cohort=()", - Referrer-Policy
-
控制請求中包含多少推薦人資訊。 例如:
"Referrer-Policy": "strict-origin-when-cross-origin", - 嚴格-傳輸-安全
-
強制與您的伺服器進行安全 ( HTTPS ) 連線。 這些標頭不會自動設定,因為您的網站可能會被加入 Chrome 的 HTTP Strict Transport Security ( HSTS ) 預載清單。 例如:
"Strict-Transport-Security" : "max-age=63072000; includeSubDomains; preload", - 內容安全政策
-
允許來自受信任網域及其所有子網域的內容。 瞭解更多例如:
"Content-Security-Policy": "default-src 'self' example.com *.example.com",
Javascript 範例
export default {
async fetch(request) {
const DEFAULT_SECURITY_HEADERS = {
"X-Content-Type-Options": "nosniff",
"Referrer-Policy": "strict-origin-when-cross-origin",
"Cross-Origin-Embedder-Policy": 'require-corp; report-to="default";',
"Cross-Origin-Opener-Policy": 'same-site; report-to="default";',
"Cross-Origin-Resource-Policy": "same-site",
};
const BLOCKED_HEADERS = [
"Public-Key-Pins",
"X-Powered-By",
"X-AspNet-Version",
];
let response = await fetch(request);
let newHeaders = new Headers(response.headers);
const tlsVersion = request.cf.tlsVersion;
console.log(tlsVersion);
// This sets the headers for HTML responses:
if (
newHeaders.has("Content-Type") &&
!newHeaders.get("Content-Type").includes("text/html")
) {
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders,
});
}
Object.keys(DEFAULT_SECURITY_HEADERS).map((name) => {
newHeaders.set(name, DEFAULT_SECURITY_HEADERS[name]);
});
BLOCKED_HEADERS.forEach((name) => {
newHeaders.delete(name);
});
if (tlsVersion !== "TLSv1.2" && tlsVersion !== "TLSv1.3") {
return new Response("You need to use TLS version 1.2 or higher.", {
status: 400,
});
} else {
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders,
});
}
},
};