コンテンツにスキップ

セキュリティヘッダーの設定

X-XSS-Protection、X-Frame-Options、X-Content-Type-Optionsなどの一般的なセキュリティヘッダーを設定します。

export default {
async fetch(request) {
// 設定したいセキュリティヘッダーを含むオブジェクトを定義します。
// 詳細なオプションについては、https://developers.cloudflare.com/rules/snippets/examples/security-headers/#other-common-security-headers を参照してください。
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);
// レスポンスヘッダーを修正するための新しいHeadersオブジェクトを作成します
let newHeaders = new Headers(response.headers);
// これはHTMLレスポンスのヘッダーを設定します:
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,
});
}
// 上で定義したDEFAULT_SECURITY_HEADERSオブジェクトを使用して新しいセキュリティヘッダーを設定します。
Object.keys(DEFAULT_SECURITY_HEADERS).map((name) => {
newHeaders.set(name, DEFAULT_SECURITY_HEADERS[name]);
});
// 上で定義したBLOCKED_HEADERSオブジェクトを使用して、ブロックしたいヘッダーを削除します。
BLOCKED_HEADERS.forEach((name) => {
newHeaders.delete(name);
});
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders,
});
},
};

その他の一般的なセキュリティヘッダー

  • Content-Security-Policyヘッダー: これらのヘッダーを有効にすると、信頼できるドメインとそのすべてのサブドメインからのコンテンツが許可されます。 詳細については、Content-Security-Policyを参照してください。
"Content-Security-Policy": "default-src 'self' example.com *.example.com",
  • Strict-Transport-Securityヘッダー: これらは自動的に設定されません。なぜなら、あなたのウェブサイトがChromeのHSTSプリロードリストに追加される可能性があるからです。
"Strict-Transport-Security" : "max-age=63072000; includeSubDomains; preload",
  • Permissions-Policyヘッダー: FLoCからのオプトアウトなど、ブラウザ機能の使用を許可または拒否します。
"Permissions-Policy": "interest-cohort=()",
  • X-XSS-Protectionヘッダー: XSS攻撃が検出された場合、ページの読み込みを防ぎます。詳細については、X-XSS-Protectionを参照してください。
"X-XSS-Protection": "0",
  • X-Frame-Optionsヘッダー: クリックジャッキング攻撃を防ぎます。詳細については、X-Frame-Optionsを参照してください。
"X-Frame-Options": "DENY",