我应该在我的 REST Api 中使用 Helmet 的哪些模块

Ech*_*ano 4 api rest node.js express helmet.js

题:

休息 API 应该使用哪些头盔模块?

背景:

我正在构建一个 Node/Express REST Api 并不断看到 Helmet 作为我应该使用的安全中间件弹出。查看 Helmet 的文档,看起来某些模块(内容安全策略、跨域等)仅适用于前端应用程序。哪些模块应该在 Helmet 中用于 Rest API?

Eva*_*ahn 9

tl;dr:以下内容可能对 API 有用,但您可以设置更多以确保安全:

  • helmet.expectCtExpect-CT如果您的 API 的使用者知道如何处理证书透明度,则它会设置标头。
  • helmet.frameguard,它设置X-Frame-Options标头,如果您的 API 响应被放入 aniframe或类似的中,则非常有用。(我个人遇到过这个问题。)
  • helmet.hsts,设置Strict-Transport-Security标头,有助于让用户使用 HTTPS
  • helmet.noSniff,它设置X-Content-Type-Options标头,在浏览器中很有用,它们可能会尝试自动检测 API 响应的类型并做一些意想不到的事情。(我个人遇到过这个问题。)
  • helmet.permittedCrossDomainPolicies,设置X-Permitted-Cross-Domain-Policies标头,可能有助于保护您的网站免受来自 Adob​​e 产品(如 Flash)的奇怪请求

头盔的作者在这里。

我想说将 Helmet(或它设置的 HTTP 标头)与 API 一起使用有两个原因:

  1. 某些标头在非浏览器用例中很有用,例如 REST API。
  2. 如果您的响应曾经被加载到浏览器中。例如,如果黑客将其放入<iframe>并导致意外发生。(老浏览器有时会出现问题在这里,造成安全漏洞。)你也可以这样做是为了面向未来的API的情况下,这以往任何时候都加载到浏览器中,即使今天不是。

Helmet 只是 13 个较小的中间件的集合。其中大多数设置了单个 HTTP 响应标头,并且大多数标头仅在浏览器中有用。但是,有些偶尔对 API(REST 或其他)有用。

让我们一一列举:

  • helmet.contentSecurityPolicy,设置Content-Security-Policy标题,可能没有用
  • helmet.dnsPrefetchControl,设置X-DNS-Prefetch-Control标题,可能没有用
  • helmet.expectCt,它设置Expect-CT标头,如果您的 API 的使用者知道如何处理证书透明度,它可能会很有用
  • helmet.featurePolicy,设置Feature-Policy标题,可能没有用
  • helmet.frameguard,它设置X-Frame-Options标头,在您的 API 响应被放入 an或类似的情况下可能很有用iframe。(我个人遇到过这个问题。)
  • helmet.hidePoweredBy,删除X-Powered-By标题,可能没有用(它在浏览器中甚至没有那么有用!)
  • helmet.hsts,设置Strict-Transport-Security标头,可能有助于保持用户使用 HTTPS
  • helmet.ieNoOpen,设置X-Download-Options标题,可能没有用
  • helmet.noCache 将在未来的 Helmet 版本中删除,无论如何对安全性不是很有用,所以它可能没有用
  • helmet.noSniff,设置X-Content-Type-Options标头,可能在浏览器中很有用,这些浏览器可能会尝试自动检测 API 响应的类型并做一些意想不到的事情。(我个人遇到过这个问题。)
  • helmet.permittedCrossDomainPolicies,设置X-Permitted-Cross-Domain-Policies标头,可能有助于保护您的网站免受来自 Adob​​e 产品(如 Flash)的奇怪请求
  • helmet.referrerPolicy,设置Referrer-Policy标题,可能没有用
  • helmet.xssFilter,设置X-XSS-Protection标题,可能没有用

总结:其中一些可能有用——为了安全起见,可能值得设置其中的一些标头。