问题:
哪些 Helmet 模块应该用于 rest API?
背景:
我正在构建一个 Node/Express REST Api,并不断看到 Helmet 作为我应该使用的安全中间件弹出。查看 Helmet 的文档似乎有些模块(内容安全策略、跨域等)仅适用于前端应用程序。哪些模块应该在 Helmet 中用于休息 API?
tl; dr:以下内容可能对 API 有用,但您可以设置更多以确保安全:
helmet.expectCt
,如果您的 API 的使用者知道如何处理证书透明度,则它会设置Expect-CT
标头很有用helmet.frameguard
设置X-Frame-Options
标头,如果您的 API 响应被放入iframe
或类似中,它会很有用。(我个人遇到过这个问题。)helmet.hsts
,它设置了Strict-Transport-Security
标头,有助于让用户使用 HTTPShelmet.noSniff
,它设置X-Content-Type-Options
标头,在可能尝试自动检测您的 API 响应类型并执行意外操作的浏览器中很有用。(我个人遇到过这个问题。)helmet.permittedCrossDomainPolicies
,它设置X-Permitted-Cross-Domain-Policies
标题,可能有助于保护您的网站免受来自 Adobe 产品(如 Flash)的奇怪请求头盔的作者在这里。
我想说将 Helmet(或它设置的 HTTP 标头)与 API 一起使用有两个原因:
<iframe>
并导致意外发生。(旧的浏览器有时会出现问题,导致漏洞。)您也可以这样做,以防您的 API被加载到浏览器中,即使现在没有加载。Helmet 只是 13 个较小的中间件的集合。其中大多数设置了单个 HTTP 响应标头,并且大多数标头仅在浏览器中有用。但是,有些有时对 API(REST 或其他)有用。
让我们列举它们:
helmet.contentSecurityPolicy
,它设置Content-Security-Policy
标题,可能没有用helmet.dnsPrefetchControl
,它设置X-DNS-Prefetch-Control
标题,可能没有用helmet.expectCt
如果您的 API 的使用者知道如何处理证书透明度,则它设置Expect-CT
标头可能很有用helmet.featurePolicy
,它设置Feature-Policy
标题,可能没有用helmet.frameguard
,它设置X-Frame-Options
标头,如果您的 API 响应被放入或类似中,它可能很有用。iframe
(我个人遇到过这个问题。)helmet.hidePoweredBy
,它删除了X-Powered-By
标题,可能没有用(它在浏览器中甚至没有那么有用!)helmet.hsts
,它设置Strict-Transport-Security
标头,可能有助于让用户使用 HTTPShelmet.ieNoOpen
,它设置X-Download-Options
标题,可能没有用helmet.noCache
将在未来的 Helmet 版本中删除,并且无论如何对安全性都不是超级有用,所以它可能没用helmet.noSniff
,它设置X-Content-Type-Options
标头,在可能尝试自动检测您的 API 响应类型并执行意外操作的浏览器中可能很有用。(我个人遇到过这个问题。)helmet.permittedCrossDomainPolicies
,它设置X-Permitted-Cross-Domain-Policies
标题,可能有助于保护您的网站免受来自 Adobe 产品(如 Flash)的奇怪请求helmet.referrerPolicy
,它设置Referrer-Policy
标题,可能没有用helmet.xssFilter
,它设置X-XSS-Protection
标题,可能没有用总而言之:其中一些可能有用——为了安全起见,可能值得设置其中一些标头。
Helmet 是一个 Express.js 中间件。并且用于避免脚本注入。当你初始化你的应用程序时,像这样使用 Helmet:
const express = require('express');
const helmet = require('helmet');
const app = express();
app.use(helmet());
希望这有帮助:)
人们在他们的 api 中使用 Helmet 的主要原因是避免(XSS)和脚本注入。你所要做的就是这个。请记住,它只是一个快速中间件。
const helmet = require("helmet");
app.use(helmet())