From 310fd066e91f454b990372ffa30e803cc8120975 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 12:56:40 +0100 Subject: unslug zh-cn: move --- .../headers/strict-transport-security/index.html | 121 ++++++++++++++++ .../http/headers/x-dns-prefetch-control/index.html | 97 +++++++++++++ .../web/http/headers/x-frame-options/index.html | 161 +++++++++++++++++++++ 3 files changed, 379 insertions(+) create mode 100644 files/zh-cn/web/http/headers/strict-transport-security/index.html create mode 100644 files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html create mode 100644 files/zh-cn/web/http/headers/x-frame-options/index.html (limited to 'files/zh-cn/web/http/headers') diff --git a/files/zh-cn/web/http/headers/strict-transport-security/index.html b/files/zh-cn/web/http/headers/strict-transport-security/index.html new file mode 100644 index 0000000000..d890b429ef --- /dev/null +++ b/files/zh-cn/web/http/headers/strict-transport-security/index.html @@ -0,0 +1,121 @@ +--- +title: HTTP Strict Transport Security +slug: Web/HTTP/HTTP_Strict_Transport_Security +tags: + - HSTS + - HTTP + - HTTPS + - Security + - header +translation_of: Web/HTTP/Headers/Strict-Transport-Security +--- +
 HTTP Strict Transport Security(通常简称为{{Glossary("HSTS")}})是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP
+ + + + + + + + + + + + +
Header type{{Glossary("Response header")}}
{{Glossary("Forbidden header name")}}no
+ +

语法

+ +
Strict-Transport-Security: max-age=<expire-time>
+Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
+Strict-Transport-Security: max-age=<expire-time>; preload
+
+ +

指令

+ +
+
max-age=<expire-time>
+
设置在浏览器收到这个请求后的<expire-time>秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。
+
includeSubDomains {{optional_inline}}
+
如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。
+
preload {{optional_inline}}
+
查看 {{anch("预加载 HSTS")}} 获得详情。不是标准的一部分。
+
+ +

描述

+ +

一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com或者直接foo.com。

+ +

这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。

+ +

网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。

+ +
+

注意: Strict-Transport-Security 在通过 HTTP 访问时会被浏览器忽略; 因为攻击者可以通过中间人攻击的方式在连接中修改、注入或删除它.  只有在你的网站通过HTTPS访问并且没有证书错误时, 浏览器才认为你的网站支持HTTPS 然后使用 Strict-Transport-Security 的值 .

+
+ +

浏览器如何处理

+ +

你的网站第一次通过HTTPS请求,服务器响应Strict-Transport-Security 头,浏览器记录下这些信息,然后后面尝试访问这个网站的请求都会自动把HTTP替换为HTTPS。

+ +

当HSTS头设置的过期时间到了,后面通过HTTP的访问恢复到正常模式,不会再自动跳转到HTTPS。

+ +

每次浏览器接收到Strict-Transport-Security头,它都会更新这个网站的过期时间,所以网站可以刷新这些信息,防止过期发生。

+ +

Chrome、Firefox等浏览器里,当您尝试访问该域名下的内容时,会产生一个307 Internal Redirect(内部跳转),自动跳转到HTTPS请求。

+ +

示例场景

+ +

你连接到一个免费WiFi接入点,然后开始浏览网站,访问你的网上银行,查看你的支出,并且支付一些订单。很不幸,你接入的WiFi实际上是黑客的笔记本热点,他们拦截了你最初的HTTP请求,然后跳转到一个你银行网站一模一样的钓鱼网站。 现在,你的隐私数据暴露给黑客了。

+ +

Strict Transport Security解决了这个问题;只要你通过HTTPS请求访问银行网站,并且银行网站配置好Strict Transport Security,你的浏览器知道自动使用HTTPS请求,这可以阻止黑客的中间人攻击的把戏。

+ +

预加载 HSTS

+ +

谷歌维护着一个 HSTS 预加载服务。按照如下指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接到你的域名。虽然该服务是由谷歌提供的,但所有浏览器都有使用这份列表的意向(或者已经在用了)。但是,这不是 HSTS 标准的一部分,也不该被当作正式的内容。

+ + + +

示例

+ +

现在和未来的所有子域名会自动使用 HTTPS 连接长达一年。同时阻止了只能通过 HTTP 访问的内容。

+ +
Strict-Transport-Security: max-age=31536000; includeSubDomains
+
+ +

规范

+ + + + + + + + + + + + + + +
规范状态注释
{{SpecName('HSTS')}}{{Spec2('HSTS')}}Initial definition
+ +

浏览器兼容

+ + + +

{{Compat("http.headers.Strict-Transport-Security")}}

+ +

查看更多

+ + diff --git a/files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html b/files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html new file mode 100644 index 0000000000..313d309ccb --- /dev/null +++ b/files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html @@ -0,0 +1,97 @@ +--- +title: X-DNS-Prefetch-Control +slug: Controlling_DNS_prefetching +tags: + - DNS + - DNS prefetch + - HTTP + - 预解析 +translation_of: Web/HTTP/Headers/X-DNS-Prefetch-Control +--- +

{{HTTPSidebar}}

+ +

X-DNS-Prefetch-Control 头控制着浏览器的 DNS 预读取功能。 DNS 预读取是一项使浏览器主动去执行域名解析的功能,其范围包括文档的所有链接,无论是图片的,CSS 的,还是 JavaScript 等其他用户能够点击的 URL。

+ +

因为预读取会在后台执行,所以 {{glossary("DNS")}} 很可能在链接对应的东西出现之前就已经解析完毕。这能够减少用户点击链接时的延迟。

+ + + + + + + + + + + + +
Header type{{Glossary("Response header")}}
{{Glossary("Forbidden header name")}}no
+ +

语法

+ +
X-DNS-Prefetch-Control: on
+X-DNS-Prefetch-Control: off
+
+ +

参数

+ +
+
on
+
启用 DNS 预解析。在浏览器支持 DNS 预解析的特性时即使不使用该标签浏览器依然会进行预解析。
+
off
+
关闭 DNS 预解析。这个属性在页面上的链接并不是由你控制的或是你根本不想向这些域名引导数据时是非常有用的。
+
+ +

介绍

+ +

DNS 请求需要的带宽非常小,但是延迟却有点高,这一点在手机网络上特别明显。预读取 DNS 能让延迟明显减少一些,例如在用户点击链接时。在某些情况下,延迟能减少一秒钟。 

+ +

在某些浏览器中这个预读取的行为将会与页面实际内容并行发生(而不是串行)。正因如此,某些高延迟的域名的解析过程才不会卡住资源的加载。

+ +

这样可以极大的加速(尤其是移动网络环境下)页面的加载。在某些图片较多的页面中,在发起图片加载请求之前预先把域名解析好将会有至少 5% 的图片加载速度提升。

+ +

在浏览器中设置预读取配置

+ +

一般来说并不需要去管理预读取,但是可能会有用户希望关闭预读取功能。这时只需要将 network.dns.disablePrefetch 选项值设置为 true 就可以了。

+ +

另外,默认情况下,通过 {{glossary("HTTPS")}} 加载的页面上内嵌链接的域名并不会执行预加载。在 Firefox 浏览器中,可以通过 about:config 设置 network.dns.disablePrefetchFromHTTPS 值为 false 来改变这一默认行为。

+ +

示例

+ +

打开和关闭 DNS 预读取

+ +

你可以通过在服务器端发送 X-DNS-Prefetch-Control 报头,或是在文档中使用值为 {{ htmlattrxref("http-equiv") }} 的 {{ HTMLElement("meta") }} 标签:

+ +
<meta http-equiv="x-dns-prefetch-control" content="off">
+
+ +

您可以通过将 content 的参数设置为“on”来改变设置。

+ +

强制查询特定主机名

+ +

你可以通过使用 {{ htmlattrxref("rel","link") }} 属性值为 link type 中的 dns-prefetch 的 {{ HTMLElement("link") }} 标签来对特定域名进行预读取:

+ +
<link rel="dns-prefetch" href="http://www.spreadfirefox.com/">
+
+ +

在这个例子中,Firefox 将预解析域名"www.spreadfirefox.com"。

+ +

而且,{{ HTMLElement("link") }} 元素也可以使用不完整的 URL 的主机名来标记预解析,但这些主机名前必需要有双斜线:

+ +
<link rel="dns-prefetch" href="//www.spreadfirefox.com">
+
+ +

强制对域名进行预读取在一些情况下很有用, 比如, 在网站的主页上,强制在整个网站上频繁引用的域名的预解析,即使它们不在主页本身上使用。即使主页的性能可能不受影响,这将提高整体站点性能。

+ +

浏览器兼容性

+ + + +

{{Compat("http.headers.X-DNS-Prefetch-Control")}}

+ +

参考

+ + diff --git a/files/zh-cn/web/http/headers/x-frame-options/index.html b/files/zh-cn/web/http/headers/x-frame-options/index.html new file mode 100644 index 0000000000..2b6cfcda76 --- /dev/null +++ b/files/zh-cn/web/http/headers/x-frame-options/index.html @@ -0,0 +1,161 @@ +--- +title: X-Frame-Options +slug: Web/HTTP/X-Frame-Options +tags: + - HTTP + - 响应头 + - 响应头部 + - 安全性 +translation_of: Web/HTTP/Headers/X-Frame-Options +--- +
{{HTTPSidebar}}
+ +

The X-Frame-Options HTTP 响应头是用来给浏览器 指示允许一个页面 可否在 {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("embed")}} 或者 {{HTMLElement("object")}} 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 {{interwiki("wikipedia", "clickjacking")}} 攻击。

+ +

The added security is only provided if the user accessing the document is using a browser supporting X-Frame-Options. {{HTTPHeader("Content-Security-Policy")}} HTTP 头中的 frame-ancestors 指令会替代这个非标准的 header。CSP 的 frame-ancestors 会在 {{Gecko("4.0")}} 中支持,但是并不会被所有浏览器支持。然而 X-Frame-Options 是个已广泛支持的非官方标准,可以和 CSP 结合使用。

+ + + + + + + + + + + + +
Header type{{Glossary("Response header")}}
{{Glossary("Forbidden header name")}}no
+ +

语法

+ +

X-Frame-Options 有三个可能的值:

+ +
X-Frame-Options: deny
+X-Frame-Options: sameorigin
+X-Frame-Options: allow-from https://example.com/
+
+ +

指南

+ +

换一句话说,如果设置为 deny,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为sameorigin,那么页面就可以在同域名页面的 frame 中嵌套。

+ +
+
deny
+
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
+
sameorigin
+
表示该页面可以在相同域名页面的 frame 中展示。
+
allow-from uri
+
表示该页面可以在指定来源的 frame 中展示。
+
+ +

例子

+ +
+

Note: 设置 meta 标签是无效的!例如 <meta http-equiv="X-Frame-Options" content="deny"> 没有任何效果。不要这样用!只有当像下面示例那样设置 HTTP 头 X-Frame-Options 才会生效。

+
+ +

配置 Apache

+ +

配置 Apache 在所有页面上发送 X-Frame-Options 响应头,需要把下面这行添加到 'site' 的配置中:

+ +
Header always set X-Frame-Options "sameorigin"
+
+ +

要将 Apache 的配置 X-Frame-Options 设置成 deny , 按如下配置去设置你的站点:

+ +
Header set X-Frame-Options "deny"
+
+ +

要将 Apache 的配置 X-Frame-Options 设置成 allow-from,在配置里添加:

+ +
Header set X-Frame-Options "allow-from https://example.com/"
+
+ +

配置 nginx

+ +

配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 'http', 'server' 或者 'location' 的配置中:

+ +
add_header X-Frame-Options sameorigin always;
+
+ +

配置 IIS

+ +

配置 IIS 发送 X-Frame-Options 响应头,添加下面的配置到 Web.config 文件中:

+ +
<system.webServer>
+  ...
+
+  <httpProtocol>
+    <customHeaders>
+      <add name="X-Frame-Options" value="sameorigin" />
+    </customHeaders>
+  </httpProtocol>
+
+  ...
+</system.webServer>
+
+ +

配置 HAProxy

+ +

配置 HAProxy 发送 X-Frame-Options 头,添加这些到你的前端、监听 listen,或者后端的配置里面:

+ +
rspadd X-Frame-Options:\ sameorigin
+
+ +

或者,在更加新的版本中:

+ +
http-response set-header X-Frame-Options sameorigin
+
+ +

配置 Express

+ +

要配置 Express 可以发送 X-Frame-Options header,你可以用借助了 frameguard 来设置头部的 helmet。在你的服务器配置里面添加:

+ +
const helmet = require('helmet');
+const app = express();
+app.use(helmet.frameguard({ action: "sameorigin" }));
+
+ +

或者,你也可以直接用 frameguard

+ +
const frameguard = require('frameguard')
+app.use(frameguard({ action: 'sameorigin' }))
+
+ +

结果

+ +

在 Firefox 尝试加载 frame 的内容时,如果 X-Frame-Options 响应头设置为禁止访问了,那么 Firefox 会用 about:blank 展现到 frame 中。也许从某种方面来讲的话,展示为错误消息会更好一点。

+ +

规范

+ + + + + + + + + + + + + + +
规范标题
{{RFC("7034")}}HTTP Header Field X-Frame-Options
+ +

浏览器兼容性

+ + + +

{{Compat("http.headers.X-Frame-Options")}}

+ +

参见

+ + -- cgit v1.2.3-54-g00ecf