【问题标题】:What modules of Helmet should I use in my REST Api我应该在我的 REST Api 中使用 Helmet 的哪些模块
【发布时间】:2020-06-27 14:46:45
【问题描述】:

问题:

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

背景:

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

【问题讨论】:

    标签: node.js rest api express helmet.js


    【解决方案1】:

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

    • helmet.expectCt 设置 Expect-CT 标头,如果您的 API 的使用者知道如何处理证书透明性,那么它很有用
    • helmet.frameguard 设置 X-Frame-Options 标头,如果您的 API 响应被放入 iframe 或类似名称中,它会很有用。 (我个人也遇到过。)
    • helmet.hsts,设置 Strict-Transport-Security 标头,有助于保持用户使用 HTTPS
    • helmet.noSniff 设置 X-Content-Type-Options 标头,在可能尝试自动检测您的 API 响应类型并执行意外操作的浏览器中很有用。 (我个人也遇到过。)
    • helmet.permittedCrossDomainPolicies,它设置了 X-Permitted-Cross-Domain-Policies 标头,可能有助于保护您的网站免受来自 Adob​​e 产品(如 Flash)的奇怪请求

    这里是 Helmet 的作者。

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

    1. 一些标头在非浏览器用例中很有用,例如 REST API。
    2. 如果您的响应曾经加载到浏览器中。例如,如果黑客将其放入<iframe> 并导致意外发生。 (旧版浏览器有时会出现问题,从而导致漏洞。)您也可以这样做以确保您的 API 经得起未来的考验,以防它 曾经加载到浏览器中,即使现在没有。李>

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

    让我们列举它们:

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

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

    【讨论】:

    • 为什么大小写过滤器没有用?从其他两个 cmets 看来,它用于此目的。
    • xssFilter 可能没用,因为 (1) API 使用者根本不应该执行 JavaScript (2) 即使在浏览器中,它也不是针对 XSS 攻击的彻底保护。
    【解决方案2】:

    Helmet 是一个 Express.js 中间件。并且用于避免脚本注入。初始化应用时,请像这样使用 Helmet:

    const express = require('express');
    const helmet = require('helmet');
    
    const app = express();
    
    app.use(helmet());
    

    希望这有帮助:)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-11-26
        • 2020-09-22
        • 2012-06-09
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多