我应该为哪些内容类型设置与安全相关的HTTP响应标头?

时间:2018-01-08 13:37:21

标签: security http-headers content-security-policy x-frame-options strict-transport-security

我已经构建了一个Web应用程序(使用我喜欢的语言Fantom!),并且正在通过提供行业标准HTTP响应标头将其从XSS和其他此类攻击中锁定。

我的问题是,应该为哪些回复设置标题?

我可以设置每个响应的标题,但这似乎相当浪费,因为大多数请求都是针对图片,字体,样式表等。Content-Security-Policy尤其可以得到冗长。

由于许多标题与拥有的HTML页面(以及其中包含的Javascript)相关,我感觉大多数标题只需要设置为HTML页面。

我查看了各种资源,例如:

虽然他们解释了标题的作用,但是他们没有解释他们应该使用和服务的资源!

我在HTTP响应标题下面列出了一个列表,我认为应该为它们提供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可以加载字体和图像。

2 个答案:

答案 0 :(得分:1)

Theoretically, only 'active' documents should need it much like the X-XSS-Protection header ( related answer here from Info Security移除文字装饰。只要在主文档上设置策略(甚至通过Meta标记),就应该根据 策略阻止外部资源,而不是外部资源上的策略(加载CDN时很容易看到)几乎肯定没有你的CSP或任何CSP设置的文件。

所以我会说你的估计是正确的;文本/ HTML和XML绝对应该拥有它,任何可以执行Javascript的东西。静态资源不重要。它们将根据主要文档的CSP被阻止或允许。

我承认,就我个人而言,我只是简单地将它们发送到我服务器直接提供的所有资源上,因为我宁愿偏执而不是搞砸了,每个请求几十个字节似乎不大特别是在没有提供大量请求的网站上。如果您的网站确实提供了大量请求,通常最好在尝试缩小标头之前减少请求。

与此类似,我一定要测试您的具体实现,并尝试加载CSP应阻止的一些资源。您永远不知道浏览器实现何时可能存在缺陷(或者更常见的是,在您自己的规则中出现错误或过度/非常急切的应用)。

答案 1 :(得分:1)

Strict-Transport-Security

在“ HSTS预加载列表”的deployment recommendations中指出:

  

Strict-Transport-Security标头添加到所有HTTPS响应

在Apache中,这看起来像(注意,我没有包含preload指令,开发人员在添加该指令之前应先阅读HSTS Preload List的部署建议):

<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


Content-Security-Policy(和一般与安全性有关的标头)

作为一种通用方法,您至少要向所有能够执行脚本的(常见)MIME类型添加安全标头:


此外,IMO还考虑为所有响应设置严格的Referrer-Policy。我希望这会有所帮助:)