我应该为哪个 Content-Types 设置安全相关的 HTTP 响应 headers?
For which Content-Types should I set security related HTTP response headers?
我已经构建了一个 Web 应用程序(使用我最喜欢的语言 Fantom!),并且正在通过提供行业标准 HTTP 响应来锁定它免受 XSS 和其他此类攻击 header s.
我的问题是,应该为哪些响应设置 header?
我可以为 每个 响应设置 headers,但考虑到大多数请求将针对图像、字体、样式表等,这似乎很浪费。 Content-Security-Policy
header 特别是会变得很长。
由于很多 headers 与拥有的 HTML 页面(以及包含在其中的 Javascript)相关,我觉得它们中的大部分只需要设置为HTML 页。
我查看了各种资源,例如:
虽然他们解释了 header 的作用,但他们没有解释应该为哪些资源使用和服务!
我在下面列出了 HTTP 响应 header,我认为 Content-Types
应该使用它们。但是有人知道这是否正确吗?
HTTP Response Header text/html All Content-Types
------------------------- --------- -----------------
Content-Security-Policy X
Referrer-Policy X
Strict-Transport-Security X
X-Content-Type-Options X
X-Frame-Options X
X-XSS-Protection X
(当我说text/html
时我也包括application/xhtml+xml
。)
Referrer-Policy
属于所有内容类型,因为 CSS 能够加载字体和图像。
理论上,只有 'active' 个文档应该像 X-XSS-Protection header (related answer here from Info Security) 一样需要它。只要在主文档上设置了政策(即使通过元标记),外部资源应该根据 that 政策被阻止,而不是外部资源上的政策(很容易看到在加载几乎肯定没有您的 CSP 或任何 CSP 设置的 CDN 文件时。
所以我想说你的估计是正确的; text/HTML和XML绝对应该有它,任何可以执行Javascript的东西。对于静态资源应该无关紧要。将根据主文档的 CSP 阻止或允许它们。
我承认,就我个人而言,我只是将它们发送到直接从我的服务器提供的所有资源上,因为我宁愿偏执也不愿搞砸,而且每个请求的几十个字节似乎并没有太大影响,尤其是在一个不满足大量请求的网站上。而且,如果您的网站确实服务于大量请求...通常最好在尝试缩小 headers 之前减少请求。
与类似的事情一样,我一定会测试您的具体实施并尝试加载 CSP 应该阻止的一些资源。您永远不知道浏览器的实现何时可能存在缺陷(或者更常见的是拼写错误或 over/under 急于应用您自己的规则)。
Strict-Transport-Security
在 "HSTS Preload List" 的 deployment recommendations 中声明:
Add the Strict-Transport-Security
header to all HTTPS responses
在 apache 中,这看起来像(注意我没有包含 preload
指令,开发人员应该在添加之前先阅读 HSTS 预加载列表的部署建议):
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=16070400; includeSubDomains" "expr=%{HTTPS} == 'on'"
</IfModule>
X-XSS-Protection
如果您正在使用 CSP(不允许 'unsafe-inline'
),那么您可能不需要再担心 X-XSS-Protection
:
- Chrome 有一个“Intent to Deprecate and Remove the XSS Auditor”。
- Firefox 还没有,will not implement
X-XSS-Protection
.
- 边缘retired their XSS filter
Content-Security-Policy
(一般来说 security-related headers)
作为一般方法,您至少要为所有能够执行脚本的(通用)MIME-Types 添加安全性 headers:
- HTML
- XML
- JS(Javascript 仅在 "browsing context" 中执行,但是由于 JS 能够创建 Worker,因此适用,参见 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#CSP_in_workers)
- PDF - 是的,PDF 文件也可以执行 javascript.
此外,IMO 考虑为所有响应设置严格的 Referrer-Policy
。我希望这会有所帮助:)
我已经构建了一个 Web 应用程序(使用我最喜欢的语言 Fantom!),并且正在通过提供行业标准 HTTP 响应来锁定它免受 XSS 和其他此类攻击 header s.
我的问题是,应该为哪些响应设置 header?
我可以为 每个 响应设置 headers,但考虑到大多数请求将针对图像、字体、样式表等,这似乎很浪费。 Content-Security-Policy
header 特别是会变得很长。
由于很多 headers 与拥有的 HTML 页面(以及包含在其中的 Javascript)相关,我觉得它们中的大部分只需要设置为HTML 页。
我查看了各种资源,例如:
虽然他们解释了 header 的作用,但他们没有解释应该为哪些资源使用和服务!
我在下面列出了 HTTP 响应 header,我认为 Content-Types
应该使用它们。但是有人知道这是否正确吗?
HTTP Response Header text/html All Content-Types
------------------------- --------- -----------------
Content-Security-Policy X
Referrer-Policy X
Strict-Transport-Security X
X-Content-Type-Options X
X-Frame-Options X
X-XSS-Protection X
(当我说text/html
时我也包括application/xhtml+xml
。)
Referrer-Policy
属于所有内容类型,因为 CSS 能够加载字体和图像。
理论上,只有 'active' 个文档应该像 X-XSS-Protection header (related answer here from Info Security) 一样需要它。只要在主文档上设置了政策(即使通过元标记),外部资源应该根据 that 政策被阻止,而不是外部资源上的政策(很容易看到在加载几乎肯定没有您的 CSP 或任何 CSP 设置的 CDN 文件时。
所以我想说你的估计是正确的; text/HTML和XML绝对应该有它,任何可以执行Javascript的东西。对于静态资源应该无关紧要。将根据主文档的 CSP 阻止或允许它们。
我承认,就我个人而言,我只是将它们发送到直接从我的服务器提供的所有资源上,因为我宁愿偏执也不愿搞砸,而且每个请求的几十个字节似乎并没有太大影响,尤其是在一个不满足大量请求的网站上。而且,如果您的网站确实服务于大量请求...通常最好在尝试缩小 headers 之前减少请求。
与类似的事情一样,我一定会测试您的具体实施并尝试加载 CSP 应该阻止的一些资源。您永远不知道浏览器的实现何时可能存在缺陷(或者更常见的是拼写错误或 over/under 急于应用您自己的规则)。
Strict-Transport-Security
在 "HSTS Preload List" 的 deployment recommendations 中声明:
Add the
Strict-Transport-Security
header to all HTTPS responses
在 apache 中,这看起来像(注意我没有包含 preload
指令,开发人员应该在添加之前先阅读 HSTS 预加载列表的部署建议):
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=16070400; includeSubDomains" "expr=%{HTTPS} == 'on'"
</IfModule>
X-XSS-Protection
如果您正在使用 CSP(不允许 'unsafe-inline'
),那么您可能不需要再担心 X-XSS-Protection
:
- Chrome 有一个“Intent to Deprecate and Remove the XSS Auditor”。
- Firefox 还没有,will not implement
X-XSS-Protection
. - 边缘retired their XSS filter
Content-Security-Policy
(一般来说 security-related headers)
作为一般方法,您至少要为所有能够执行脚本的(通用)MIME-Types 添加安全性 headers:
- HTML
- XML
- JS(Javascript 仅在 "browsing context" 中执行,但是由于 JS 能够创建 Worker,因此适用,参见 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#CSP_in_workers)
- PDF - 是的,PDF 文件也可以执行 javascript.
此外,IMO 考虑为所有响应设置严格的 Referrer-Policy
。我希望这会有所帮助:)