Web 安全
======

确保你的 Web 站点或 Web 应用安全是十分重要的，即使是代码中很小的 bug 也可能导致隐私信息被泄露，黑客会尝试偷窃数据。这些文档提供信息帮助你使代码更安全。此处列出的面向 Web 安全的文章提供的信息可以帮助你保护站点及其代码免受攻击和数据窃取。

内容安全
----

CSP (内容安全策略) (en-US)

**内容安全策略**（CSP）通过探测和减轻包括跨站脚本攻击 XSS (en-US) 和数据注入攻击的攻击手段，更进一步提升安全性。上述攻击手段可以使用在数据窃取、网站污损、亦或是恶意软件的分发等场景中。

连接安全
----

传输层安全（TLS）

传输层安全（TLS）协议是在两个互联的应用或设备上稳定且私密地交换信息的标准。使用 TLS 的应用可以选择对数据安全性和可靠性有保障的安全参数。这篇文章提供了 TLS 的概述，以及在保护你的内容时需要做出的选择。

HTTPS

**HTTPS**（***超文本传输协议安全***）是 HTTP 协议的加密版本，它使用 SSL 或 TLS 协议来对客户端和服务器之间的所有通信进行加密。所建立的安全连接使得客户端可以确认所连接的服务器，并且可以交换敏感数据。

HTTP Strict-Transport-Security

`Strict-Transport-Security:` HTTP 标头可以让网站指定其只能通过 HTTPS 访问。

证书透明度

**证书透明度**是一个开放的框架，旨在防止和监测证书的误发。新颁发的证书被记录到公开运行的、通常是独立的 CT 日志中，这些日志保持着一个仅有附录的、有密码学保证的 TLS 证书的记录。

混合内容 (en-US)

如果一个 HTTPS 页面包含明文 HTTP 获取的内容，那么该页面就被称为**混合内容**页面。像这样的页面只能保证部分内容加密，未加密的部分仍然可以被嗅探器和中间人攻击者感知。

如何修复含有混合内容的网站 (en-US)

如果你的网站传送了 HTTPS 页面，所有使用 HTTP 传送的活跃混合内容 (en-US)默认会被阻止。因而，你的网站可能会对客户不可用（例如 iframe 或插件不加载）。被动的混合内容 (en-US)默认是显示状态，但用户也可以通过首选设置来阻止这种类型的内容。这个页面解释了作为 web 开发人员需要注意的事情。

安全上下文

一个**安全的上下文**是一个 `Window` 或 `Worker`，对于它来说，有理由相信内容已经安全地通过 HTTPS/TLS 交付，并且与**不**安全的上下文进行通信的可能性有限。许多 Web API 和功能只能在安全上下文中访问。安全上下文的主要目标是防止中间人攻击者访问强大的 API，从而进一步损害攻击受害者。

限制在安全上下文中的特性

该参考列出了仅在安全上下文中可用的 web 平台特性。

弱签名算法

用于数字证书签名的摘要算法是保证证书安全性的关键因素。这篇文章提供了一些有关已知的弱签名算法信息，在使用的时候可以避免它们。

301 和 302 响应码跳转

待补充

数据安全
----

使用 HTTP Cookies

*HTTP cookie*（web cookie，浏览器 cookie）是服务器发送给客户端 web 浏览器的一小块数据。浏览器可能会存储它，并在后续对同一服务器的请求中将它发送回服务器。例如，通常这可以说明两个请求来自同一个浏览器，从而让用户保持登录状态。

Local storage

`Window` 对象的 `Window.localStorage` 属性是一种服务器在客户端上存储持久性数据的方法，数据可以在不同的会话中持久访问。

信息泄露
----

Referer 标头策略：隐私和安全性考虑 (en-US)

有一些与 Referer HTTP 标头相关的隐私和安全风险。这篇文章描述了它们，并提供避免这些风险的建议。

Robots.txt

待补充

Site maps

待补充

完整性
---

同源策略

**同源策略**限制了一个源中加载的文档或脚本与其他源中的资源交互的方式。这是一种用来隔离潜在恶意文档的关键安全机制。

子资源完整性

**子资源完整性**（SRI）是一种安全功能，允许浏览器验证所获取的文件（比如，从一个内容分发网络中）没有遭受恶意修改。它的工作原理是允许你提供一个加密哈希值，目标文件必须匹配这个值。

HTTP Access-Control-Allow-Origin

**`Access-Control-Allow-Origin`** 响应头表明响应是否可以与来自给定来源的请求代码共享。

HTTP X-Content-Type-Options

**`X-Content-Type-Options`** 响应的 HTTP 头是一个标记，由服务器用来表示应该遵循 `Content-Type` 头中宣告的 MIME 类型，不应该被改变。这是一种选择退出 MIME 类型嗅探的方法，或者换句话说，MIME 类型是故意配置的。

点击劫持保护
------

点击劫持 (en-US)描述了用户被愚弄，点击了一个产生用户意料之外行为的 UI 元素的现象。

HTTP X-Frame-Options

**`X-Frame-Options`** HTTP 响应头可以用来表明是否应该允许浏览器在 `<frame>`、`<iframe>`、`<embed>` 或 `<object>` 中渲染页面。网站通过这些方法，保证它们的内容不被轻易嵌入至其他站点，可以避免点击劫持 (en-US)攻击。

CSP: frame-ancestors

HTTP `Content-Security-Policy`（CSP）的 **`frame-ancestors`** 指令指定了使用 `<frame>`、`<iframe>`、`<object>` 或`<embed>` 元素嵌入页面的合法父元素。

用户信息安全
------

不安全的密码 (en-US)

通过 HTTP 提供登录表格是特别危险的，因为有各种各样的攻击可以用来提取用户的密码。网络窃听者可以通过嗅探网络，或通过修改传输中的服务页面来窃取用户的密码。

隐私性和 :visited 选择器

在大约 2010 年之前，CSS `:visited` 选择器允许网站获取用户的浏览历史，弄清用户访问过哪些网站。为了缓解这个问题，浏览器已经限制了从访问过的链接中获得的信息量。

与安全相关的术语
--------

* Block cipher mode of operation
* 认证机构 (en-US)
* 挑战—响应认证
* 密码
* 密码套件
* 密文
* Clickjacking (en-US)
* 跨源资源共享
* CORS-safelisted request header (en-US)
* CORS-safelisted response header (en-US)
* 跨站脚本攻击
* 密码分析学 (en-US)
* Cryptographic hash function
* 密码学
* 内容安全策略
* 跨站请求伪造
* 解密
* 数字证书
* DTLS (en-US)
* 加密
* Forbidden header name
* Forbidden response header name
* Hash
* HMAC
* HPKP (en-US)
* HSTS
* HTTPS
* 密钥
* 中间人攻击
* OWASP (en-US)
* 预检请求
* 非对称密钥算法 (en-US)
* Reporting directive (en-US)
* Robots.txt (en-US)
* 同源策略
* 会话劫持 (en-US)
* SQL 注入
* 对称密钥算法 (en-US)
* TOFU (en-US)
* TLS
参见
--

* Mozilla 安全博客
* Twitter 上的 @mozsec 账号