为什么 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