Express.js 中如何使用 helmet 保护应用程序安全

阅读时长 8 分钟读完

什么是 helmet

Helmet 是一个 Node.js 应用程序的中间件,它可以帮助你保护你的应用程序免受一些已知的 Web 漏洞攻击。例如,它可以帮助你:

  • 设置响应头,以防止跨站点脚本攻击 (XSS)、点击劫持攻击和其他恶意攻击;
  • 隐藏应用程序的技术细节,以防止攻击者了解你的应用程序的架构和版本信息;
  • 配置 Content Security Policy (CSP)、HTTP Public Key Pinning (HPKP)、Strict Transport Security (HSTS) 等安全策略;

如何使用 helmet

在 Express.js 中使用 helmet 非常简单。只需安装 helmet:

然后,在应用程序的入口文件中添加以下代码:

这将应用 helmet 的所有默认安全中间件。你可以使用以下代码查看 helmet 为你的应用程序添加了哪些安全中间件:

这将输出以下内容:

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

helmet 的安全中间件

contentSecurityPolicy

Content Security Policy (CSP) 是一种安全策略,它允许你控制浏览器从哪些源加载内容。通过配置 CSP,你可以防止跨站点脚本攻击 (XSS)、点击劫持攻击和其他恶意攻击。

默认情况下,helmet 会将 CSP 配置为只允许从应用程序自身加载内容。你可以使用以下代码自定义 CSP:

dnsPrefetchControl

dnsPrefetchControl 中间件可以防止浏览器进行 DNS 预取。如果你的应用程序不需要进行 DNS 预取,可以使用以下代码禁用它:

expectCt

expectCt 中间件可以启用 Certificate Transparency (CT),以防止恶意攻击者使用伪造的数字证书攻击你的应用程序。

默认情况下,helmet 会将 expect-ct 头设置为不强制执行。你可以使用以下代码启用它:

frameguard

frameguard 中间件可以防止点击劫持攻击。默认情况下,helmet 会将 X-Frame-Options 头设置为 DENY,这将阻止所有页面在 iFrame 中加载。你可以使用以下代码自定义 X-Frame-Options 头:

hidePoweredBy

hidePoweredBy 中间件可以隐藏应用程序的技术细节,以防止攻击者了解你的应用程序的架构和版本信息。默认情况下,helmet 会将 X-Powered-By 头设置为 PHP 7.4.3。你可以使用以下代码自定义 X-Powered-By 头:

hpkp

HTTP Public Key Pinning (HPKP) 中间件可以启用公钥固定,以防止恶意攻击者使用伪造的数字证书攻击你的应用程序。

默认情况下,helmet 会将 HPKP 头设置为不强制执行。你可以使用以下代码启用它:

hsts

Strict Transport Security (HSTS) 中间件可以启用严格的传输安全。当浏览器访问你的应用程序时,它会强制使用 HTTPS 协议。

默认情况下,helmet 会将 HSTS 头设置为 60 天。你可以使用以下代码自定义 HSTS 头:

ieNoOpen

ieNoOpen 中间件可以防止 Internet Explorer 浏览器打开未知的 MIME 类型文件。

默认情况下,helmet 会将 X-Download-Options 头设置为 noopen。你可以使用以下代码自定义 X-Download-Options 头:

noSniff

noSniff 中间件可以防止浏览器将响应的 MIME 类型自动检测为不正确的类型。

默认情况下,helmet 会将 X-Content-Type-Options 头设置为 nosniff。你可以使用以下代码自定义 X-Content-Type-Options 头:

permittedCrossDomainPolicies

permittedCrossDomainPolicies 中间件可以配置跨域策略。默认情况下,helmet 会将 X-Permitted-Cross-Domain-Policies 头设置为 none,这将防止浏览器使用 Adobe Flash 跨域访问你的应用程序。你可以使用以下代码自定义 X-Permitted-Cross-Domain-Policies 头:

referrerPolicy

referrerPolicy 中间件可以配置 referrer 策略。默认情况下,helmet 会将 Referrer-Policy 头设置为 no-referrer。你可以使用以下代码自定义 Referrer-Policy 头:

xssFilter

xssFilter 中间件可以启用浏览器的内置 XSS 过滤器。

默认情况下,helmet 会将 X-XSS-Protection 头设置为 1; mode=block。你可以使用以下代码自定义 X-XSS-Protection 头:

结论

使用 helmet 可以帮助你保护你的应用程序免受一些已知的 Web 漏洞攻击。在 Express.js 中使用 helmet 非常简单,只需安装 helmet 并在应用程序的入口文件中添加一行代码即可。在添加 helmet 后,你可以使用 console.log(helmet()) 查看 helmet 为你的应用程序添加了哪些安全中间件,并自定义这些中间件以满足你的特定需求。

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

纠错
反馈