为什么 NodeJs 中需要 Helmet?

2025-05-26

为什么 NodeJs 中需要 Helmet?

Helmet 通过设置各种 HTTP 标头来帮助你保护 Express 应用的安全。它并非万能药,但确实能帮上忙!

这些是写在 npm 的头盔页面顶部的行。

你们大多数人可能在代码库/样板中见过这段代码app.use(helmet())。今天我们就来深入研究一下 Helmet。

简单来说,Helmet 添加/保护您的 express 应用程序返回的 HTTP 标头。

大多数新手开发人员往往会忽略这一点(安全的 HTTP 标头)。

helmet()是 15 个中间件的包装器,其中 11 个是默认使用的,并带有预设设置。

让我们详细看看这 11 个标题:

  • Content-Security-Policy

    用于缓解 XSS 攻击。帮助控制哪些域/子域、哪些协议以及哪些媒体应该与服务器通信。
    helmet.contentSecurityPolicy();

  • X-DNS-Prefetch-Control

    正如此标头的名称所示,浏览器会在(并行)加载页面内容的同时尝试解析 DNS。DNS 解析是为了什么?——针对正在加载的页面上引用的链接、图片等。预加载在后台进行。有助于减少延迟。默认情况下,Helper 将此设置为off
    helmet.dnsPrefetchControl(options)

  • Expect-CT

    此标题中的 CT 代表证书透明度。请在该网站上找到错误颁发的证书。
    helmet.expectCt()

  • X-Frame-Options

    这是一个众所周知的标头,用于在一定程度上防止点击劫持。会被frame-ancestors内容安全策略标头的指令覆盖。
    helmet.frameguard();

  • X-Powered-By

    即使关闭此标头,也几乎不会产生任何影响。express在 Express 框架中默认设置为。
    helmet.hidePoweredBy()

  • Strict-Transport-Security

    简称 HSTS,告知浏览器该网站只能通过 HTTP(S) 协议访问。请勿使用 HTTP!选项中接受一个必填参数max-age(在 Helmet 中为 180 天)和两个可选参数includeSubDomains(默认为 true)和preload(默认为 false)。
    helmet.hsts(options)

  • X-Download-Options

    特定于 Internet Explorer,此标头强制执行潜在的不安全文件并直接下载它们,从而防止脚本注入,因为文件不再在站点的安全上下文中打开。
    helmet.ieNoOpen()

  • X-Content-Type-Options

    helmet.noSniff 将 X-Content-Type-Options 标头设置为 nosniff。浏览器有时会尝试通过查看服务器共享的资源字节数来猜测 MIME 类型。嘿,浏览器!别这么做。这是 MIME 嗅探。让我在内容类型选项中教你一个 nosniff 的例子。
    helmet.noSniff()

  • X-Permitted-Cross-Domain-Policies

    啊!这有点棘手。查看这篇文章了解详细说明。
    helmet.permittedCrossDomainPolicies(options)

  • Referrer-Policy

    服务器通过 header 指定它需要的所有 referrer 信息Referer(哦,是的!拼写错误)Referrer-Policy。如果使用 Helmet,则默认为 no-referrer。helmet.referrerPolicy
    (options)

  • X-XSS-Protection

    哦,停!我检测到了 XSS 攻击。
    如果值为 0,则禁用 XSS 过滤。
    如果值为 1,则启用 XSS 过滤。如果检测到 XSS,则先进行清理,然后再加载。
    如果值为 1,则 mode=block,则启用 XSS 过滤。不进行清理,直接停止渲染。
    helmet.xssFilter()

这就是 Helmet 设置的 11 个默认 headers 的全部内容。以下是 Helmet NPM 页面的片段:

替代文本

文章来源:https://dev.to/sid__/why-do-you-need-helmet-in-nodejs-h1b
PREV
42 条关于如何在 DevOps 和生活中取得成功的技巧
NEXT
Understanding HTML Form Encoding: URL Encoded and Multipart Forms URL Encoded Form Multipart Forms Text/plain Forms