安全相关headers

425 阅读8分钟

Content-Security-Policy

HTTP 响应头 Content-Security-Policy 允许站点管理者控制用户代理能够为指定的页面加载哪些资源。

相关配置 

Content-Security-Policy: default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests

说明:

  • default-src 'self':只允许同源下的资源
  • base-uriL: 'self': 限制在 DOM 中 <base> 元素可以使用的 URL, 'self'表示使用同源策略
  • font-src: 'self' https: data: : 设置允许通过 @font-face 加载的字体源地址。https:表示需要使用https来请求资源,data: 表示允许通过data来请求资源
  • form-action 'self':限制能被用来作为给定上下文的表单提交的目标 URL(说白了,就是限制 form 的 action 属性的链接地址)
  • frame-ancestors 'self':指定可能嵌入页面的有效父项 <frame><iframe><object><embed> 或 <applet>。 以指示是否应允许浏览器在 frame或iframe中呈现页面。站点可以通过确保其内容不嵌入其他站点来使用它来避免点击劫持攻击。frame-ancestors 'self': 此设置只允许当前站点引用页面。
  • img-src 'self' data::限制图片和图标的源地址。
  • object-src 'none': 限制 <object><embed> 或 <applet> 标签的源地址。none表示所有的地址都不允许加载。
  • script-src 'self':限制 JavaScript 的源地址。
  • script-src-attr 'none': 此指令仅指定内联脚本事件处理程序(如onclick)的有效源。
  • style-src 'self' https: 'unsafe-inline':限制CSS文件源。
  • upgrade-insecure-requests: 让浏览器把一个网站所有的不安全 URL(通过 HTTP 访问)当做已经被安全的 URL 链接(通过 HTTPS 访问)替代。这个指令是为了那些有量大不安全的传统 URL 需要被重写时候准备的。

Cross-Origin-Embedder-Policy

HTTP Cross-Origin-Embedder-Policy (COEP) 响应标头可防止文档加载未明确授予文档权限

说明:

  • Cross-Origin-Embedder-Policy: unsafe-none:这是默认值。允许文档获取跨源资源,而无需通过 CORS 协议或 Cross-Origin-Resource-Policy 头。
  • Cross-Origin-Embedder-Policy: require-corp: 文档只能从相同的源加载资源,或显式标记为可从另一个源加载的资源。 如果跨源资源支持 CORS,则 crossorigin 属性或 Cross-Origin-Resource-Policy 头必须使用它来加载资源,而不会被 COEP 阻止。

Cross-Origin-Opener-Policy

HTTP Cross-Origin-Opener-Policy (COOP)响应标头使您可以确保顶级文档不会与跨源文档共享浏览上下文组。

说明:

  • Cross-Origin-Opener-Policy:unsafe-none:这是默认值。允许将文档添加到其打开程序的浏览上下文组中,除非打开程序本身的COOP为 same-origin 或 same-origin-allow-popups 。
  • Cross-Origin-Opener-Policy:same-origin-allow-popups:保留对新打开的窗口或选项卡的引用,这些窗口或选项卡要么不设置COOP,要么通过设置unsafe-none来选择退出隔离
  • Cross-Origin-Opener-Policy:same-origin:将浏览上下文仅隔离于同源文档。跨源文档不会在同一浏览上下文中加载。

Origin-Agent-Cluster

Origin-Agent-Cluster http 标头(规范) 允许页面请求被源(而不是站点)隔离

说明:

  • Origin-Agent-Cluster: ?1:要求浏览器按来源隔离页面。
  • Origin-Agent-Cluster: ?0: 按站点隔离页面。可以通过改变document.domain实现跨域

Referrer-Policy

Referrer-Policy 首部用来监管哪些访问来源信息——会在 Referer 中发送——应该被包含在生成的请求当中。

说明:

  • Referrer-Policy: no-referrer:整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。
  • Referrer-Policy: no-referrer-when-downgrade:在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别的情况下,引用页面的地址会被发送 (HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)。
  • Referrer-Policy: origin:在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址
  • Referrer-Policy: origin-when-cross-origin:对于同源的请求,会发送完整的 URL 作为引用地址,但是对于非同源请求仅发送文件的源。
  • Referrer-Policy: same-origin:对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。
  • Referrer-Policy: strict-origin:在同等安全级别的情况下,发送文件的源作为引用地址 (HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。
  • Referrer-Policy: strict-origin-when-cross-origin:对于同源的请求,会发送完整的 URL 作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址 (HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。
  • Referrer-Policy: unsafe-url:无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。

Strict-Transport-Security

(通常简称为 HSTS)响应标头用来通知浏览器应该只通过 HTTPS 访问该站点,并且以后使用 HTTP 访问该站点的所有尝试都应自动转换为 HTTPS

相关配置:Strict-Transport-Security: max-age=15552000; includeSubDomains

说明:

  • max-age=<expire-time>:设置在浏览器收到这个请求后的<expire-time>秒的时间内凡是访问这个域名下的请求都使用 HTTPS 请求。
  • includeSubDomains:如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。

X-Content-Type-Options

X-Content-Type-Options HTTP 消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。

相关配置:X-Content-Type-Options: nosniff

说明:

  • X-Content-Type-Options: nosniff
  • 下面两种情况的请求将被阻止:
    • 请求类型是"style" 但是 MIME 类型不是 "text/css",
    • 请求类型是"script" 但是 MIME 类型不是 JavaScript MIME 类型
  • 注意:nosniff 只应用于 "script" 和 "style" 两种类型

X-DNS-Prefetch-Control

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

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

相关配置: X-DNS-Prefetch-Control: off

说明:

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

X-Download-Options

说明:

  • 1. X-Download-Options: noopen: - noopen 用于指定IE 8以上版本的用户不打开文件而直接保存文件。在下载对话框中不显示“打开”选项。

X-Frame-Options

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

说明:

  • X-Frame-Options: DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
  • X-Frame-Options: SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。
  • 注意:如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

X-Permitted-Cross-Domain-Policies

用于指定客户端能够访问的跨域策略文件的类型。

跨域策略文件是一种 XML 文件,用于授予 Web 客户端应用权限以处理跨域数据,如 Adobe Flash、Adobe Reader 等。当客户端请求托管在非自己域上的内容时,远程域需要配置一个跨域策略文件以授权请求域的访问,从而使得客户端继续进行相应的交互。

说明:

  • X-Permitted-Cross-Domain-Policies:none:目标服务器的任何位置都不允许使用策略文件,包括主策略文件
  • X-Permitted-Cross-Domain-Policies:master-only:仅允许使用主策略文件
  • X-Permitted-Cross-Domain-Policies:by-content-type:仅限 HTTP/HTTPS 协议使用,只允许使用 Content-Type: text/x-cross-domain-policy 提供的策略文件
  • X-Permitted-Cross-Domain-Policies:by-ftp-filename:仅限 FTP 协议使用,只允许使用文件名为 crossdomain.xml 的策略文件
  • X-Permitted-Cross-Domain-Policies:all:目标域上的所有策略文件都可以使用

X-XSS-Protection

当检测到跨站脚本攻击 (XSS (en-US)) 时,浏览器将停止加载页面。

说明:

  • X-XSS-Protection: 0:禁止 XSS 过滤。
  • X-XSS-Protection: 1:启用 XSS 过滤(通常浏览器是默认的)。如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。
  • X-XSS-Protection:1;mode=block:启用 XSS 过滤。如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。
  • X-XSS-Protection:1; report=<reporting-URI> (Chromium only):启用 XSS 过滤。如果检测到跨站脚本攻击,浏览器将清除页面并使用 CSP report-uri (en-US)指令的功能发送违规报告。