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 --- files/zh-cn/web/security/csp/index.html | 36 ---- .../introducing_content_security_policy/index.html | 56 ------ .../csp/using_csp_violation_reports/index.html | 97 ---------- .../information_security_basics/index.html | 28 --- .../configuring_server_mime_types/index.html | 118 ------------ .../web/security/subresource_integrity/index.html | 199 +++++++++++++++++++++ .../security/transport_layer_security/index.html | 18 ++ .../index.html" | 18 -- .../index.html" | 199 --------------------- 9 files changed, 217 insertions(+), 552 deletions(-) delete mode 100644 files/zh-cn/web/security/csp/index.html delete mode 100644 files/zh-cn/web/security/csp/introducing_content_security_policy/index.html delete mode 100644 files/zh-cn/web/security/csp/using_csp_violation_reports/index.html delete mode 100644 files/zh-cn/web/security/information_security_basics/index.html delete mode 100644 files/zh-cn/web/security/securing_your_site/configuring_server_mime_types/index.html create mode 100644 files/zh-cn/web/security/subresource_integrity/index.html create mode 100644 files/zh-cn/web/security/transport_layer_security/index.html delete mode 100644 "files/zh-cn/web/security/\344\274\240\350\276\223\345\261\202\345\256\211\345\205\250\345\215\217\350\256\256/index.html" delete mode 100644 "files/zh-cn/web/security/\345\255\220\350\265\204\346\272\220\345\256\214\346\225\264\346\200\247/index.html" (limited to 'files/zh-cn/web/security') diff --git a/files/zh-cn/web/security/csp/index.html b/files/zh-cn/web/security/csp/index.html deleted file mode 100644 index 232b502c3f..0000000000 --- a/files/zh-cn/web/security/csp/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 内容安全策略 (CSP) -slug: Web/Security/CSP -translation_of: Web/HTTP/CSP -translation_of_original: Web/Security/CSP ---- -
{{gecko_minversion_header("2.0")}}
- -

内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本 (XSS) 和数据注入等攻击。 这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途。

- -

尽管内容安全策略在 Firefox 4 中已经包含,使用 X-Content-Security-Policy 头部来实现,但它使用的是过时的 CSP 标准。Firefox 23 包含了更新的 CSP 实现,使用的是 W3C CSP 1.0 标准中描述的没有前缀的 Content-Security-Policy 头部和指令。

- -

内容安全策略主题

- -
-
介绍内容安全策略
-
概述什么是 CSP,以及它如何让你的网站变得更安全。
-
CSP 策略指令
-
CSP 策略指令参考。
-
使用内容安全策略
-
你可以通过配置策略集调整 CSP 的行为。这让你可以按需对个别类型的资源使用宽松或严格的安全策略。这篇文章讲述了如何建立 CSP 和如何激活你网站的 CSP。
-
使用 CSP 违规报告
-
如何使用 CSP 违规报告来监视攻击你网站的尝试和攻击者。
-
默认 CSP 限制 {{obsolete_inline("15.0")}}
-
CSP 强制实施的默认限制的细节
-
- -

另请参阅

- - diff --git a/files/zh-cn/web/security/csp/introducing_content_security_policy/index.html b/files/zh-cn/web/security/csp/introducing_content_security_policy/index.html deleted file mode 100644 index ce27f52be4..0000000000 --- a/files/zh-cn/web/security/csp/introducing_content_security_policy/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 内容安全策略介绍 -slug: Web/Security/CSP/Introducing_Content_Security_Policy -tags: - - 介绍 - - 内容安全策略 - - 安全 -translation_of: Web/HTTP/CSP -translation_of_original: Web/Security/CSP/Introducing_Content_Security_Policy ---- -

{{ gecko_minversion_header("2") }}

- -

内容安全策略 (CSP)  是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本 (XSS) 和数据注入等攻击。 这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途。

- -

CSP被设计成向后兼容;不支持的浏览器依然可以运行使用了它的服务器页面,反之亦然。不支持CSP的浏览器会忽略它,像平常一样运行,默认对网页内容使用标准的同源策略。如果网站不提供CSP头部,浏览器同样会使用标准的同源策略

- -

开启CSP就如配置您的页面服务来返回Content-Security-Policy HTTP 头部一样简单. (Firefox 23之前的版本使用的是X-Content-Security-Policy ). 查看 Using Content Security Policy 获取如何配置和开启CSP的细节

- -
提示: 内容安全策略标准特点 是一种能被 {{ HTMLElement("meta") }}元素来配置的一种协议,但这种做法仍未被Firefox支持, 支持这种做法是被添加在bug 663570.
- -

减少跨域脚本

- -

CSP的主要目标是减少和报告XSS攻击. XSS攻击利用浏览器对从服务器接受的内容的信任。恶意的脚本在受害的浏览器被执行, 因为浏览器相信内容源,甚至当内容源并不是从它应该来的地方过来的。

- -

CSP使服务器管理员能够通过制定浏览器能够执行的可信赖脚本的域名来减少或者消除由XSS可能出现的矢量。 一个兼容CSP的浏览器将只会执行加载与白名单域名的源文件的脚本,忽略那些其他的脚本(包括内联脚本和事件操控HTML属性)

- -

作为一种最终的保护,想要禁止脚本的站点可以选择全局禁止脚本执行

- -

减少数据包监听攻击

- -

为了重新约束内容被下载的域名, 服务端能够制定那种协议能够被使用;例如(理论上,从安全的立足点来看),一个服务制定所有的内容都通过HTTPS协议来加载

- -
提示:一个完整地数据传输安全策略不单单包括通HTTPS加强数据的传输,还可以使所有cookie带上安全标志并且提供从HTTP页面到对应HTTPS页面的自动重定向。
- -
提示:站点可能也会使用 Strict-Transport-Security HTTP头部来确保浏览器只通过一个加密渠道来连接他们
- -

See also

- - - -

Specification

- - - -
-

{{ languages( { "ja": "ja/Introducing_Content_Security_Policy" } ) }}

-
- -

 

diff --git a/files/zh-cn/web/security/csp/using_csp_violation_reports/index.html b/files/zh-cn/web/security/csp/using_csp_violation_reports/index.html deleted file mode 100644 index 2577fa1fde..0000000000 --- a/files/zh-cn/web/security/csp/using_csp_violation_reports/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Using CSP violation reports -slug: Web/Security/CSP/Using_CSP_violation_reports -translation_of: Web/HTTP/CSP -translation_of_original: Web/Security/CSP/Using_CSP_violation_reports ---- -

{{ gecko_minversion_header("2.0") }}{{ draft() }}

- -

CSP其中的一个强大的特性是它为web站点管理员提供了生成和报告详细的站点攻击的描述信息。这些报告通过HTTP的POST请求发送到预先你指定的一个或多个服务器上,这些服务器可以通过 report-uri 策略来制定。发送的报告是JSON格式的,对于非ASCII字符,其使用了默认的JSON UTF-8编码。本文将向你展示如何在你的站点上配置报告,以及报告的格式。

- -

对于支持CSP的浏览器,只要你制定了合法的 report-uri 指令,任何违背该策略的攻击操作都会被浏览器所报告。

- -

开启报告

- -

默认情况下,攻击是不会被报告的。要开启报告模式,你要指定 report-uri 指令,这个指令包含了至少一个用于接收报告的URI:

- -
Content-Security-Policy: default-src self; report-uri http://reportcollector.example.com/collector.cgi
-
- -

然后,你要搭建接受报告的服务器;它可以对报告进行存储和并进行适时的处理。

- -

注意:Firefox 23以前的版本所使用的报告头为 X-Content-Security-Policy。这个头在将来将被废弃。

- -

攻击报告的语法

- -

报告的JSON对象包含了以下的数据:

- -
-
document-uri
-
当前攻击所发生的文档的URI。
-
referrer
-
当前攻击所发生的文档的来源页面的URI。
-
blocked-uri
-
被CSP策略所拦截的资源的URI。如果被拦截资源的URI属于与当前文档不同的来源,则所拦截的资源URI会被削减至只剩scheme,host和port三部分。
-
violated-directive
-
攻击所针对的策略部分的名称
-
original-policy
-
由X-Content-Security-Policy头指定的原始策略。
-
- -

Sample violation report

- -

攻击报告的样例

- -
在CSP规范中,已经有一个样例展示攻击报告。这里我们来看另一个例子。
- -
 
- -
假设有一个页面叫做http://example.com/signup.html. 它使用了一下的策略,它禁止从除cdn.example.com以外的域加载样式表。
- -
-
Content-Security-Policy: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports
-
-
- -
signup.html的HTML则像下面这样:
- -
<!DOCTYPE html>
-<html>
-  <head>
-    <title>Sign Up</title>
-    <link rel="stylesheet" href="css/style.css">
-  </head>
-  <body>
-    ... Content ...
-  </body>
-</html>
-
- -
看到问题了么?在策略中指明样式表只能从cdn.example.com加载,而这个页面则试图从它本域(http://example.com)下载样式表. 浏览器基于强制CSP的开启,在这个页面被访问时,将以下的报告通过POST请求发送到 http://example.com/_/csp-reports
- -
{
-  "csp-report": {
-    "document-uri": "http://example.com/signup.html",
-    "referrer": "",
-    "blocked-uri": "http://example.com/css/style.css",
-    "violated-directive": "style-src cdn.example.com",
-    "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports"
-  }
-}
-
- -

我们可以看到,这个报告在blocked-uri中包含了错误资源的整个路径。而这并非总是这样。例如,当signup.html试图从http://anothercdn.example.com/stylesheet.css加载css的时候,浏览器只会记录来源(http://anothercdn.example.com)而不会记录完整的路径。CSP规范中对这一行为进行了解释。总结一下,CSP的作用是放置跨域信息的泄露。值得注意的是,规范中的 攻击报告范例 有一处错误(其中blocked-uri应该是"http://evil.example.com")。

- -

更多参考

- - - -
-

{{ languages( { "ja": "ja/Security/CSP/Using_CSP_violation_reports" } ) }}

-
- -

 

diff --git a/files/zh-cn/web/security/information_security_basics/index.html b/files/zh-cn/web/security/information_security_basics/index.html deleted file mode 100644 index d9c1f0769f..0000000000 --- a/files/zh-cn/web/security/information_security_basics/index.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 信息安全基础 -slug: Web/Security/Information_Security_Basics -translation_of: Web/Security/Information_Security_Basics ---- -

了解安全基础知识有助于你了解整个Web开发生命周期中安全性的作用和重要性。 这将帮助你避免不必要的不安全软件,使得攻击者利用漏洞获得经济利益或其他恶意用途。以下的文章提供一些基本的Web安全理论和定义。

- -
-
机密性、完整性和可用性
-
描述了信息安全的基本目标,是理解信息安全的基础。
-
漏洞
-
明确主要漏洞策略以及讨论在所有软件中的存在的所有漏洞。
-
威胁 - Threats
-
对主要威胁概念的简单介绍。
-
安全控制 - Security Controls
-
明确主要安全控制策略以及它们潜在的缺点。
-
TCP/IP 安全
-
TCP/IP模型的介绍,还有SSL的教程。
-
- -

相关链接

- - diff --git a/files/zh-cn/web/security/securing_your_site/configuring_server_mime_types/index.html b/files/zh-cn/web/security/securing_your_site/configuring_server_mime_types/index.html deleted file mode 100644 index 577aacfb08..0000000000 --- a/files/zh-cn/web/security/securing_your_site/configuring_server_mime_types/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Properly Configuring Server MIME Types -slug: Web/Security/Securing_your_site/Configuring_server_MIME_types -tags: - - HTTP -translation_of: Learn/Server-side/Configuring_server_MIME_types ---- -

Background

- -

默认情况下,许多web服务器会为那些未知内容类型的文件配置一个默认MIME类型text/plain 或者application/octet-stream 。当一种新的内容类型被创造或者被添加到web服务器上,web管理者在添加它到web服务器配置中可能会失败。主要原因是用户使用Gecko-based 的浏览器,而这种浏览器只相信由web服务器和web应用所发布的MIME类型

- -

What are MIME types?

- -

MIME类型描述了邮件或者web服务器或者web应用中的媒体内容的类型,其目的是为了指导web浏览器对媒体内容的处理和表现。MIME类型的示例如下:

- - - -

Technical Background

- -

完整的MIME类型列表可在 IANA | MIME Media Types 查看.

- -

HTTP specification 中定义了能够描述在web中使用的媒体类型的MIME超集。

- -

Why are correct MIME types important?

- -

Example of an incorrect MIME type result 假如web服务器或者应用报告内容的MIME类型不正确,根据HTTP规范,或许发起人想要处理和显示内容通过他所规定的MIME类型,因此web浏览器无法采取任何措施。

- -

对于某些浏览器,例如IE,它尝试允许web服务器对于错误配置通过其源码猜测它可能的正确MIME类型。

- -

这种做法将会避免许多由web管理员他们的错误。因为当内容的MIME类型错误,IE将会用可能正确的MIME类型来继续处理内容。例如你设置一个img的类型为text/plain ,IE可能会设置它为正确的MIME类型images/*

- -

出于安全原因,使用正确的MIME类型的服务内容也是重要的; 恶意内容可能会影响用户的计算机,假装它是一个安全类型文档,实际上不是。

- -
-

注意: 从历史角度, 只要HTML文档请求处理CSS文件 ,Firefox 能够正常加载CSS即使它设置了错误的MIME类型。处于安全原因, {{ gecko("2.0") }} 对于从请求文档不同来源加载的样式表,将不再这样做。如果CSS来自于不同来源,你必须设置它的正确MIME类型 (text/css).

- -

Gecko 1.9.1.11 (Firefox 3.5.11) 和 Gecko 1.9.2.5 (Firefox 3.6.5) 同样实施这种安全措施,但是提高它的实用性。如果样式表中的第一行看起来是一个很好的CSS构造,则存在允许加载的临时启发式算法。在Firefox 4中已经删除了启发式,您必须正确设置text/css 的MIME类型,才能够识别CSS。

-
- -

为何浏览器不应该猜测 MIME 类型

- -

除了违返了HTTP规范,让浏览器去猜测正确的MIME类型是一个差劲的策略。原因如下

- -

失去控制

- -

假如浏览器忽略报告的MIME类型,web管理员和用户不在对内容如何进行处理有发言权了。

- -

例如,面对web开发员的网址可能希望发送某些实例HTML文档,同时通希望能够以 text/html或者 text/plain 的MIME类型进行数据的处理和显示 或者 作为一个源代码。如果浏览器猜测它的正确MIME类型为 text/html 那么开发员不在有权利进行选择了。

- -

安全性

- -

一些内容类型,例如可执行程序,本质上是不安全的。原因是经过规范化的MIME类型都有经过严格规定浏览器如何对这类类型的文件进行操作。一个可执行程序不能够在用户的电脑浏览器上执行,但可以通过弹出会话询问是否下载这个文件

- -

MIME类型猜测导致IE浏览器的安全漏洞(通过利用IE能够将错误的MIME类型 修改为正确的类型)。这绕过了正常的下载对话框,导致InternetExplorer猜测内容是可执行程序,然后在用户的计算机上运行。

- -

如何确定服务器发送内容的 MIME 类型

- -

通过开发者工具的 ContentType 查看MIME类型。

- -

根据标准,通过一个 meta 标签来设置MIME类型 例如 <meta http-equiv="Content-Type" content="text/html"> 当包含{{HTTPHeader("Content-Type")}} 时则忽略 meta 标签

- - - -

如何为你的内容确定正确的 MIME 类型

- -

这里有几种方法来确定文件的正确MIME类型

- -
    -
  1. 如果你的内容是通过供应商软件应用创建的,那么你可以阅读供应商文档确认不同媒体文件的MIME值
  2. -
  3. 通过查看完整的MIME类型表 IANA | MIME Media Types registry 
  4. -
  5. 如果使用插件netscape gecko显示媒体类型,请安装插件,然后查看“帮助”>“关于插件”菜单,以查看哪些MIME类型与媒体类型相关联。
  6. -
  7. 搜索文件扩展名 FILExt 或者File extensions reference ,确认扩展名和哪种类型的MIME相关联
  8. -
- -

如何设置服务器以发送正确的MIME类型

- -

基本的方法是配置你的服务器发送正确的HTTP ContentType类型给每个文档

- - - - - - - -
-

Original Document Information

- - -
diff --git a/files/zh-cn/web/security/subresource_integrity/index.html b/files/zh-cn/web/security/subresource_integrity/index.html new file mode 100644 index 0000000000..86c80188c0 --- /dev/null +++ b/files/zh-cn/web/security/subresource_integrity/index.html @@ -0,0 +1,199 @@ +--- +title: Subresource Integrity +slug: Web/Security/子资源完整性 +tags: + - CORS + - SRI + - Security + - Subresource Integrity + - 子资源完整性 +translation_of: Web/Security/Subresource_Integrity +--- +

子资源完整性(SRI)是允许浏览器检查其获得的资源(例如从 CDN 获得的)是否被篡改的一项安全特性。它通过验证获取文件的哈希值是否和你提供的哈希值一样来判断资源是否被篡改。

+ +

SRI 如何工作

+ +

使用 {{Glossary("CDN", "内容分发网络 (CDNs)")}} 在多个站点之间共享脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用CDN也存在风险,如果攻击者获得对 CDN 的控制权,则可以将任意恶意内容注入到 CDN 上的文件中 (或完全替换掉文件)
+ ),因此可能潜在地攻击所有从该 CDN 获取文件的站点。

+ +

子资源完整性通过确保 Web 应用程序获得的文件未经第三方注入或其他任何形式的修改来降低这种攻击的风险。

+ + + +
+

Note: SRI并不能规避所有的风险。第三方库经常会自己请求额外的信息,这就有可能会携带用户的账号密码等关键信息。这些经常需要js功能的支持,比如一个地图库会需要取<svg>数据来渲染,但是包含点击事件。

+
+ +

如何使用 SRI

+ +

将使用 base64 编码过后的文件哈希值写入你所引用的 {{HTMLElement("script")}} 或 {{HTMLElement("link")}} 标签的 integrity 属性值中即可启用子资源完整性功能。

+ +

integrity 值分成两个部分,第一部分指定哈希值的生成算法(目前支持 sha256、sha384 及 sha512),第二部分是经过 base64 编码的实际哈希值,两者之间通过一个短横(-)分割。

+ +
+

integrity 值可以包含多个由空格分隔的哈希值,只要文件匹配其中任意一个哈希值,就可以通过校验并加载该资源。

+
+ +

使用 base64 编码 sha384 算法计算出摘要后的 integrity 值的例子:

+ +
sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
+
+ +

oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC 即哈希值部分,sha384 前缀说明使用的是 sha384 哈希方法。

+ +
+

integrity 中的“hash”部分,严格来说,是一种经过特定的哈希函数转换之后的密码学摘要。但是更一般的叫法就是哈希,本文用的也是这种叫法。

+
+ +

生成 SRI 哈希的工具

+ +

你可以用 openssl 在命令行中执行如下命令来生成 SRI 哈希值:

+ +
cat FILENAME.js | openssl dgst -sha384 -binary | openssl enc -base64 -A         
+ +

或者用 shasum 在命令行中执行:

+ +
shasum -b -a 384 FILENAME.js | xxd -r -p | base64
+ +

另外,SRI Hash Generator 是一个在线生成 SRI 哈希值的工具。

+ +

内容安全策略及子资源完整性

+ +

你可以根据内容安全策略来配置你的服务器使得指定类型的文件遵守 SRI。这是通过在 CSP 头部添加 {{CSP("require-sri-for")}} 指令实现的:

+ +
Content-Security-Policy: require-sri-for script;
+ +

这条指令规定了所有 JavaScript 都要有 integrity 属性,且通过验证才能被加载。

+ +

你也可以指定所有样式表也要通过 SRI 验证:

+ +
Content-Security-Policy: require-sri-for style;
+ +

你也可以对两者都加上验证。

+ +

范例

+ +

在这个例子中,我们已知 oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC 是一个指定文件,比如 example-framework.js,经过 SHA-384 算法得出的摘要,同时在 https://example.com/example-framework.js 上有其一份拷贝。

+ +

在 script 标签中增加 SRI

+ +

你可以使用以下的 {{HTMLElement("script")}} 元素告诉浏览器在执行 https://example.com/example-framework.js 中的内容之前,必须先比较该文件的哈希值是否和预期的一致,只有一致才能执行。

+ +
<script src="https://example.com/example-framework.js"
+        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
+        crossorigin="anonymous"></script>
+ +
+

有关 crossorigin 属性的更多信息,见 CORS settings attributes.

+
+ +

浏览器如何处理 SRI

+ +

浏览器根据以下步骤处理 SRI:

+ +
    +
  1. 当浏览器在  {{HTMLElement("script")}} 或者 {{HTMLElement("link")}}  标签中遇到 integrity 属性之后,会在执行脚本或者应用样式表之前对比所加载文件的哈希值和期望的哈希值。
  2. +
  3. 当脚本或者样式表的哈希值和期望的不一致时,浏览器必须拒绝执行脚本或者应用样式表,并且必须返回一个网络错误说明获得脚本或样式表失败。
  4. +
+ +

规范

+ + + + + + + + + + + + + + + + + + + +
规范状态注释
{{SpecName('Subresource Integrity')}}{{Spec2('Subresource Integrity')}}
{{SpecName('Fetch')}}{{Spec2('Fetch')}}
+ +

浏览器兼容性

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
The integrity attribute for <script> and <link>{{ CompatChrome("45.0") }}{{ CompatGeckoDesktop("43") }}{{CompatNo}}{{CompatOpera("32")}}{{CompatNo}} [1]
The CSP {{CSP("require-sri-for")}} directive{{CompatUnknown}}{{ CompatGeckoDesktop("49") }}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
The integrity attribute for <script> and <link>{{ CompatChrome("45.0") }}{{CompatGeckoMobile("43")}}{{CompatNo}}{{CompatNo}}{{CompatNo}} [1]
The CSP {{CSP("require-sri-for")}} directive{{CompatUnknown}}{{CompatGeckoMobile("49")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

[1] {{WebKitBug(148363)}}

+ +

[2] 位于 security.csp.experimentalEnabled 之后的是: config preference。

+ +

相关资料

+ + + +

{{QuickLinksWithSubpages("/zh-CN/docs/Web/Security")}}

diff --git a/files/zh-cn/web/security/transport_layer_security/index.html b/files/zh-cn/web/security/transport_layer_security/index.html new file mode 100644 index 0000000000..ed6e6bb128 --- /dev/null +++ b/files/zh-cn/web/security/transport_layer_security/index.html @@ -0,0 +1,18 @@ +--- +title: 传输层安全协议 +slug: Web/Security/传输层安全协议 +tags: + - 传输层安全协议 + - 安全 + - 密码学 +translation_of: Web/Security/Transport_Layer_Security +--- +

使用传输层安全性协议(TLS)进行的任何连接的安全性在很大程度上取决于密码套件和所选的安全性参数。 本文的目的是帮助您确保客户端和服务器之间的机密性和完整性通信。Mozilla运营安全团队(OpSec)维护了 服务器端TLS参考配置的Wiki条目

+ +

传输层安全性协议(Transport Layer Security protocol,TLS)是使两个联网应用程序或设备能够安全可靠地交换信息的标准。使用TLS的应用程序可以自行选择安全性参数,这可能会对数据的安全性和可靠性产生重大影响。本文对TLS进行了概述,并提供了多种在保护内容时需要做出的决策。

+ +

另请参阅

+ + diff --git "a/files/zh-cn/web/security/\344\274\240\350\276\223\345\261\202\345\256\211\345\205\250\345\215\217\350\256\256/index.html" "b/files/zh-cn/web/security/\344\274\240\350\276\223\345\261\202\345\256\211\345\205\250\345\215\217\350\256\256/index.html" deleted file mode 100644 index ed6e6bb128..0000000000 --- "a/files/zh-cn/web/security/\344\274\240\350\276\223\345\261\202\345\256\211\345\205\250\345\215\217\350\256\256/index.html" +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 传输层安全协议 -slug: Web/Security/传输层安全协议 -tags: - - 传输层安全协议 - - 安全 - - 密码学 -translation_of: Web/Security/Transport_Layer_Security ---- -

使用传输层安全性协议(TLS)进行的任何连接的安全性在很大程度上取决于密码套件和所选的安全性参数。 本文的目的是帮助您确保客户端和服务器之间的机密性和完整性通信。Mozilla运营安全团队(OpSec)维护了 服务器端TLS参考配置的Wiki条目

- -

传输层安全性协议(Transport Layer Security protocol,TLS)是使两个联网应用程序或设备能够安全可靠地交换信息的标准。使用TLS的应用程序可以自行选择安全性参数,这可能会对数据的安全性和可靠性产生重大影响。本文对TLS进行了概述,并提供了多种在保护内容时需要做出的决策。

- -

另请参阅

- - diff --git "a/files/zh-cn/web/security/\345\255\220\350\265\204\346\272\220\345\256\214\346\225\264\346\200\247/index.html" "b/files/zh-cn/web/security/\345\255\220\350\265\204\346\272\220\345\256\214\346\225\264\346\200\247/index.html" deleted file mode 100644 index 86c80188c0..0000000000 --- "a/files/zh-cn/web/security/\345\255\220\350\265\204\346\272\220\345\256\214\346\225\264\346\200\247/index.html" +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: Subresource Integrity -slug: Web/Security/子资源完整性 -tags: - - CORS - - SRI - - Security - - Subresource Integrity - - 子资源完整性 -translation_of: Web/Security/Subresource_Integrity ---- -

子资源完整性(SRI)是允许浏览器检查其获得的资源(例如从 CDN 获得的)是否被篡改的一项安全特性。它通过验证获取文件的哈希值是否和你提供的哈希值一样来判断资源是否被篡改。

- -

SRI 如何工作

- -

使用 {{Glossary("CDN", "内容分发网络 (CDNs)")}} 在多个站点之间共享脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用CDN也存在风险,如果攻击者获得对 CDN 的控制权,则可以将任意恶意内容注入到 CDN 上的文件中 (或完全替换掉文件)
- ),因此可能潜在地攻击所有从该 CDN 获取文件的站点。

- -

子资源完整性通过确保 Web 应用程序获得的文件未经第三方注入或其他任何形式的修改来降低这种攻击的风险。

- - - -
-

Note: SRI并不能规避所有的风险。第三方库经常会自己请求额外的信息,这就有可能会携带用户的账号密码等关键信息。这些经常需要js功能的支持,比如一个地图库会需要取<svg>数据来渲染,但是包含点击事件。

-
- -

如何使用 SRI

- -

将使用 base64 编码过后的文件哈希值写入你所引用的 {{HTMLElement("script")}} 或 {{HTMLElement("link")}} 标签的 integrity 属性值中即可启用子资源完整性功能。

- -

integrity 值分成两个部分,第一部分指定哈希值的生成算法(目前支持 sha256、sha384 及 sha512),第二部分是经过 base64 编码的实际哈希值,两者之间通过一个短横(-)分割。

- -
-

integrity 值可以包含多个由空格分隔的哈希值,只要文件匹配其中任意一个哈希值,就可以通过校验并加载该资源。

-
- -

使用 base64 编码 sha384 算法计算出摘要后的 integrity 值的例子:

- -
sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
-
- -

oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC 即哈希值部分,sha384 前缀说明使用的是 sha384 哈希方法。

- -
-

integrity 中的“hash”部分,严格来说,是一种经过特定的哈希函数转换之后的密码学摘要。但是更一般的叫法就是哈希,本文用的也是这种叫法。

-
- -

生成 SRI 哈希的工具

- -

你可以用 openssl 在命令行中执行如下命令来生成 SRI 哈希值:

- -
cat FILENAME.js | openssl dgst -sha384 -binary | openssl enc -base64 -A         
- -

或者用 shasum 在命令行中执行:

- -
shasum -b -a 384 FILENAME.js | xxd -r -p | base64
- -

另外,SRI Hash Generator 是一个在线生成 SRI 哈希值的工具。

- -

内容安全策略及子资源完整性

- -

你可以根据内容安全策略来配置你的服务器使得指定类型的文件遵守 SRI。这是通过在 CSP 头部添加 {{CSP("require-sri-for")}} 指令实现的:

- -
Content-Security-Policy: require-sri-for script;
- -

这条指令规定了所有 JavaScript 都要有 integrity 属性,且通过验证才能被加载。

- -

你也可以指定所有样式表也要通过 SRI 验证:

- -
Content-Security-Policy: require-sri-for style;
- -

你也可以对两者都加上验证。

- -

范例

- -

在这个例子中,我们已知 oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC 是一个指定文件,比如 example-framework.js,经过 SHA-384 算法得出的摘要,同时在 https://example.com/example-framework.js 上有其一份拷贝。

- -

在 script 标签中增加 SRI

- -

你可以使用以下的 {{HTMLElement("script")}} 元素告诉浏览器在执行 https://example.com/example-framework.js 中的内容之前,必须先比较该文件的哈希值是否和预期的一致,只有一致才能执行。

- -
<script src="https://example.com/example-framework.js"
-        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
-        crossorigin="anonymous"></script>
- -
-

有关 crossorigin 属性的更多信息,见 CORS settings attributes.

-
- -

浏览器如何处理 SRI

- -

浏览器根据以下步骤处理 SRI:

- -
    -
  1. 当浏览器在  {{HTMLElement("script")}} 或者 {{HTMLElement("link")}}  标签中遇到 integrity 属性之后,会在执行脚本或者应用样式表之前对比所加载文件的哈希值和期望的哈希值。
  2. -
  3. 当脚本或者样式表的哈希值和期望的不一致时,浏览器必须拒绝执行脚本或者应用样式表,并且必须返回一个网络错误说明获得脚本或样式表失败。
  4. -
- -

规范

- - - - - - - - - - - - - - - - - - - -
规范状态注释
{{SpecName('Subresource Integrity')}}{{Spec2('Subresource Integrity')}}
{{SpecName('Fetch')}}{{Spec2('Fetch')}}
- -

浏览器兼容性

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
The integrity attribute for <script> and <link>{{ CompatChrome("45.0") }}{{ CompatGeckoDesktop("43") }}{{CompatNo}}{{CompatOpera("32")}}{{CompatNo}} [1]
The CSP {{CSP("require-sri-for")}} directive{{CompatUnknown}}{{ CompatGeckoDesktop("49") }}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
The integrity attribute for <script> and <link>{{ CompatChrome("45.0") }}{{CompatGeckoMobile("43")}}{{CompatNo}}{{CompatNo}}{{CompatNo}} [1]
The CSP {{CSP("require-sri-for")}} directive{{CompatUnknown}}{{CompatGeckoMobile("49")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
-
- -

[1] {{WebKitBug(148363)}}

- -

[2] 位于 security.csp.experimentalEnabled 之后的是: config preference。

- -

相关资料

- - - -

{{QuickLinksWithSubpages("/zh-CN/docs/Web/Security")}}

-- cgit v1.2.3-54-g00ecf