在 CloudFlare 部署 HTTP Security Header

在覆盖 100 个国家/地区超过 200 个城市的 Cloudflare 全球云网络上构建无服务器应用程序。Cloudflare Workers 提供了一个轻量级的 JavaScript 执行环境,允许开发人员在不配置或不维护基础设施的情况下,扩充现有应用程序或创建全新应用程序。

Posted by sysin on 2020-08-26
Estimated Reading Time 3 Minutes
Words 700 In Total
更新日期:Wed Aug 26 2020 10:10:12 GMT+0800,阅读量:

请访问原文链接:在 CloudFlare 部署 HTTP Security Header 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org


1. Cloudflare Works 介绍

以下引自官网,更多内容请参看官方文档

Cloudflare Workers provides a serverless execution environment that allows you to create entirely new applications or augment existing ones without configuring or maintaining infrastructure.

使用 Cloudflare Workers® 进行无服务器计算

网络就是计算机®

在覆盖 100 个国家/地区超过 200 个城市的 Cloudflare 全球云网络上构建无服务器应用程序。Cloudflare Workers 提供了一个轻量级的 JavaScript 执行环境,允许开发人员在不配置或不维护基础设施的情况下 (sysin),扩充现有应用程序或创建全新应用程序。

在边缘运行 JavaScript

请在全球数以百计的 Cloudflare 数据中心中运行 JavaScript Service Workers。修改站点的 HTTP 请求和响应,发出并行请求或从边缘生成响应。

注意:Workers 免费版请求数限制为 10万/每天。

2. 创建一个 Works

登录 Cloudflare,选择你的“域名” > Works,或者直接点击右侧面板“Works”,点击“创建 Worker”,覆盖粘贴以下 js 脚本,点击“保存并部署”。可以将创建的 Work 修改一个友好名称,如“set-header”。

备注:首次启用该功能有个选择“子域”的向导,根据提示点击下一步即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const securityHeaders = {
"Content-Security-Policy": "upgrade-insecure-requests",
"Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", //可选,“SSL/TLS > 边缘证书 > HTTP 严格传输安全 (HSTS)“ 中可以直接修改 (sysin)
"X-Xss-Protection": "1; mode=block",
"X-Frame-Options": "SAMEORIGIN",
"X-Content-Type-Options": "nosniff",
"Referrer-Policy": "strict-origin-when-cross-origin",
"Permissions-Policy": "camera=(), microphonee=()",//旧版已废弃:"Feature-Policy": "camera 'none'; microphone 'none'",
"X-Author": "gc(at)sysin.org"
},
sanitiseHeaders = {
Server: "sysin.org"
},
removeHeaders = [
"Public-Key-Pins",
"X-Powered-By",
"X-AspNet-Version"
];

async function addHeaders(req) {
const response = await fetch(req),
newHeaders = new Headers(response.headers),
setHeaders = Object.assign({}, securityHeaders, sanitiseHeaders);

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(setHeaders).forEach(name => newHeaders.set(name, setHeaders[name]));

removeHeaders.forEach(name => newHeaders.delete(name));

return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
});
}

addEventListener("fetch", event => event.respondWith(addHeaders(event.request)));

备注:具体 Header 内容请根据实际情况修改。

3. 添加路由

即将上述 worker 关联到需要执行的 URL。

示例:关联到该域名下的所有 URL,需要创建两条路由,分别关联到上述创建的 Worker(set-header)。

1
2
*.sysin.org/*
sysin.org/*

4. 验证

curl

1
curl -I https://sysin.org

或者在线检测

https://securityheaders.com/


捐助本站 ❤️ Donate

点击访问官方网站


文章用于推荐和分享优秀的软件产品及其相关技术,所有软件默认提供官方原版(免费版或试用版),免费分享。对于部分产品笔者加入了自己的理解和分析,方便学习和研究使用。任何内容若侵犯了您的版权,请联系作者删除。如果您喜欢这篇文章或者觉得它对您有所帮助,或者发现有不当之处,欢迎您发表评论,也欢迎您分享这个网站,或者赞赏一下作者,谢谢!

支付宝赞赏 微信赞赏

赞赏一下


☑️ 评论恢复,欢迎留言❗️
敬请注册!点击 “登录” - “用户注册”(已知不支持 21.cn/189.cn 邮箱)。请勿使用联合登录(已关闭)