我已经构建了一个Web应用程序(使用我最喜欢的语言Fantom!),并且正在通过提供行业标准的HTTP响应 header 将其锁定于XSS和其他此类攻击。
我的问题是,应该为标题设置哪些响应?
我可以为每个响应设置的 header ,但考虑到大多数请求将用于图像,字体,样式表等,因此这似乎很浪费。特别是Content-Security-Policy
header 可能会很长。
由于许多标题与拥有的HTML页面(以及其中包含的Javascript)有关,因此我感到其中大多数只需要为HTML页面设置。
我看过各种资源,例如:
尽管他们解释了 header 的作用,但并未解释 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
。)
由于CSS能够加载字体和图像,因此Referrer-Policy
属于所有内容类型。
最佳答案
从理论上讲,只有“事件”文档才需要它,就像X-XSS-Protection header (related answer here from Info Security)一样。只要在主文档上设置了策略(即使是通过Meta标记),也应基于该策略阻止外部资源,而不是基于外部资源的策略(加载CDN文件时几乎可以肯定没有,这很容易看出)您的CSP或任何CSP集)。
所以我想说你的估计是正确的。 text/HTML和XML绝对应该拥有它,任何可以执行Javascript的东西。静态资源无关紧要。根据主文档的CSP,将阻止或允许它们。
我个人认为,我只是将它们直接从服务器直接提供的所有资源中发送出去,因为我宁愿偏执而不愿意搞砸,而且每个请求的几十个字节似乎并没有太大的影响,特别是在没有访问权限的网站上不能满足很多要求。而且,如果您的网站确实提供了过多的请求...通常最好在缩小 header 之前先减少请求。
像这样的事情,我一定会测试您的特定实现,并尝试加载CSP应该阻止的某些资源。您永远都不知道浏览器实现何时可能存在缺陷(或更常见的是错字或您自己的规则急于应用的过高/不足)。
关于security - 我应该为哪些Content-Type设置与安全性相关的HTTP响应 header ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48151455/