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

What modules of Helmet should I use in my REST Api

问题:

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

背景:

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

人们在 restful api 中使用 Helmet 的重要原因是为了避免 (XSS) 和脚本注入。你所要做的就是这个。请记住,它只是一个快速中间件。

const helmet = require("helmet");
app.use(helmet())

头盔是一个 Express.js 中间件。并用于避免脚本注入。当你初始化你的应用程序时,像这样使用头盔:

const express = require('express');
const helmet = require('helmet');

const app = express();

app.use(helmet());

希望对您有所帮助:)

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

  • helmet.expectCt,它设置了 Expect-CT header,如果您的 API 的消费者知道如何处理证书透明性
  • ,这将很有用
  • helmet.frameguard,它设置了 X-Frame-Options header,如果你的 API 响应被放入 iframe 或类似的,它是有用的。 (我个人对此有 运行。)
  • helmet.hsts,设置 Strict-Transport-Security header,有助于让用户继续使用 HTTPS
  • helmet.noSniff,它设置 X-Content-Type-Options header,在浏览器中很有用,这些浏览器可能会尝试 auto-detect 您的 API 响应的类型并做一些意想不到的事情. (我个人对此有 运行。)
  • helmet.permittedCrossDomainPolicies,它设置了 X-Permitted-Cross-Domain-Policies header,可能有助于保护您的网站免受来自 Flash
  • 等 Adob​​e 产品的奇怪请求

这里是头盔的作者。

我想说使用 Helmet(或它设置的 HTTP headers)有两个原因 API:

  1. 一些 header 在 non-browser 用例中很有用,比如 REST API.
  2. 以防您的响应被加载到浏览器中。例如,如果黑客将其放入 <iframe> 并导致意外发生。 (旧浏览器有时会在这里出现问题,导致漏洞。)你也可以对 future-proof 你的 API 这样做,以防它 曾经在浏览器中加载过,即使如果不是今天。

Helmet 只是 collection 13 个较小的中间件。其中大多数设置单个 HTTP 响应 header,而其中大多数 header 仅在浏览器中有用。然而,有些偶尔对 APIs(REST 或其他)有用。

让我们列举一下:

  • helmet.contentSecurityPolicy,里面设置了Content-Security-Policyheader,估计没用
  • helmet.dnsPrefetchControl,里面设置了X-DNS-Prefetch-Controlheader,估计没用
  • helmet.expectCt,设置 Expect-CT header, 可能有用 如果您的 API 的消费者知道如何处理证书透明度
  • helmet.featurePolicy,里面设置了Feature-Policyheader,估计没用
  • helmet.frameguard,它设置 X-Frame-Options header, 可能有用 ,以防您的 API 响应被放置变成 iframe 或类似的。 (我个人对此有 运行。)
  • helmet.hidePoweredBy,它删除了 X-Powered-By header,可能没有用(在浏览器中甚至没那么有用!)
  • helmet.hsts,设置 Strict-Transport-Security header, 可能有用 让用户保持在 HTTPS
  • helmet.ieNoOpen,里面设置了X-Download-Optionsheader,估计没用
  • helmet.noCache 将在未来的 Helmet 版本中被删除,并且无论如何对安全性都不是很有用,所以它可能没有用
  • helmet.noSniff,它设置 X-Content-Type-Options header, 可能在浏览器中有用 可能会尝试 auto-detect 您的API 响应的类型并做一些意想不到的事情。 (我个人对此有 运行。)
  • helmet.permittedCrossDomainPolicies,设置 X-Permitted-Cross-Domain-Policies header, 可能有用 来保护您的站点免受来自 Adob​​e 产品(如 Flash)的奇怪请求
  • helmet.referrerPolicy,里面设置了Referrer-Policyheader,估计没用
  • helmet.xssFilter,里面设置了X-XSS-Protectionheader,估计没用

总而言之:其中一些可能有用——为了安全起见,可能值得设置其中一些 header。