在 Express.js 中正确使用 Helmet 进行安全设置

阅读时长 5 分钟读完

什么是 Helmet

Helmet 是一个 Node.js 中间件,用于帮助保护 Web 应用程序免受各种攻击。它通过设置 HTTP 头来提高应用程序的安全性,并提供了一些有用的功能,例如防止跨站点脚本攻击(XSS)、点击劫持攻击、防止 MIME 类型嗅探等。

如何在 Express.js 中使用 Helmet

首先,我们需要安装 Helmet。在终端中输入以下命令:

然后,在 Express.js 应用程序中使用 Helmet 很简单。只需在应用程序中导入 Helmet 并将其作为中间件使用即可。

这将启用 Helmet 的默认设置。但是,为了获得最佳的安全性,我们应该根据我们的应用程序的需要进行一些配置。

配置 Helmet

配置 CSP

内容安全策略(CSP)是一种机制,用于减轻 XSS 和其他类型的代码注入攻击。CSP 允许您指定哪些来源可以与您的应用程序交互,从而限制了攻击者可以注入的内容。

在 Express.js 应用程序中配置 CSP,您需要使用 Helmet 的 contentSecurityPolicy 中间件,并指定您的 CSP 策略。

-- -------------------- ---- -------
--------
  ------------------------------
    ----------- -
      ----------- -----------
      ---------- ---------- -------------------
      ---------- -----------
      ------------------------ ---
    --
  --
--

以上示例配置了一个相对宽松的 CSP 策略,允许来自自己的源和内联脚本的加载,并禁止 object-src 的加载。您可以根据需要调整策略。

配置 HSTS

HTTP 严格传输安全性(HSTS)是一种安全协议,可以告诉浏览器始终使用 HTTPS 访问您的网站。这可以防止中间人攻击和其他类型的网络攻击。

在 Express.js 应用程序中启用 HSTS,您需要使用 Helmet 的 hsts 中间件,并指定您的最大年龄。

以上示例启用了 HSTS,并指定了一个最大年龄为 1 年、包括子域名和预加载的 HSTS。

配置其他 HTTP 头

除了 CSP 和 HSTS 之外,Helmet 还提供了一些其他有用的中间件,例如:

  • frameguard:防止点击劫持攻击
  • xssFilter:启用浏览器内置的 XSS 过滤器
  • noSniff:防止 MIME 类型嗅探

以上示例启用了 frameguardxssFilternoSniff 中间件,并指定了一些选项。

结论

使用 Helmet 可以帮助您保护您的 Web 应用程序免受各种攻击。在 Express.js 中使用 Helmet 很简单,并且可以根据您的应用程序的需要进行配置。在您的下一个 Web 项目中尝试使用 Helmet 并提高您的应用程序的安全性。

示例代码

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - ------------------

----- --- - ----------

------------------

--------
  ------------------------------
    ----------- -
      ----------- -----------
      ---------- ---------- -------------------
      ---------- -----------
      ------------------------ ---
    --
  --
--

--------
  -------------
    ------- --------- -- - ---- -- -------
    ------------------ -----
    -------- -----
  --
--

--------------------------- ------- ------ ----
----------------------------
--------------------------

---------------- -- -- ------------------- ------- -- ---- --------

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67400efe5ade33eb7231efb8

纠错
反馈