为(非)预检请求发送不同的 HTTP headers?

Send differing HTTP headers for (non) preflight requests?

对于我的 Web 应用程序,我正在配置一组 OWASP 安全性 headers,例如 X-Frame-OptionsX-Content-Type-Options。现在我想知道我是否应该为 每个 请求发送所有这些 headers,或者我是否应该只将它们用于特定请求,例如,使用 "full"一堆安全 headers 用于获取、post、删除、放置和仅发送 CORS headers 用于预检请求。

为您提供的每种内容类型(例如 text/htmlapplication/java)和每种请求方法(GET, PUT, 等等).

然而,下面将讨论适用于不同请求和响应的那些。

关于返回的内容类型:

  • X-Content-Type-Options 尤其需要出现在所有内容类型上,否则 application/java 等类型可能会被 Internet Explorer 以其 content-sniffing.
  • 进行不同的解释
  • X-Frame-Options 用于所有内容类型以阻止它们被加框,尽管这不会阻止它们通过其他方式加载(例如 <img> 标签)。
  • X-XSS-Protection 添加到 HTML 内容类型应该足够了。
  • Content-Security-Policy 对于 HTML 内容类型应该足够了。

关于 HTTP 方法(GETPOSTPUT 等):

  • Strict-Transport-Security 如果在每个请求上都输出它会更好,因为它会更新滑动过期时间,并且还会设置 HSTS 策略,无论资源最初被请求的方式如何。
  • Public 针对每个请求的 HTTP 密钥固定扩展,与 Strict-Transport-Security header 的方式大致相同,一旦输出,就会设置策略。因为这是越快越好,如果网站对所有请求都这样做,那么它被设置得更早的可能性就越大。