Helmet — 通过设​​置各种 HTTP 标头来保护您的 Express.js 应用程序的简单方法

Helmet — 通过设​​置各种 HTTP 标头来保护您的 Express.js 应用程序的简单方法

在此处安装说明: https://www.npmjs.com/package/helmet

使用helmet.hidePoweredBy()隐藏潜在危险信息:

如果黑客看到您的网站由 Express 提供支持,他们可以利用 Express/Node 中的已知漏洞。 X-Powered-By: Express 默认情况下,在来自 Express 的每个请求中发送。

我们可以使用 头盔.hidePoweredBy() 用于删除 X-Powered-By 标头的中间件。

例子:

Using thehelmet.hidePoweredBy() middleware to remove the X-Powered-By header.

使用helmet.frameguard() 降低点击劫持的风险

您的页面可以放在一个 <frame> 或者 <iframe> 未经您的同意。这可能导致点击劫持攻击等。点击劫持是一种诱骗用户与不同于用户想象的页面进行交互的技术。这可以通过 iframe 在恶意上下文中执行您的页面来获得。在这种情况下,黑客可以在您的页面上放置一个隐藏层。隐藏按钮可用于运行不良脚本。此中间件设置 X-Frame-Options 标头。它限制了谁可以将您的网站放入框架中。它具有三种模式:DENY、SAMEORIGIN 和 ALLOW-FROM。

例子:

Using helmet to securing our app from being framed.

使用helmet.xssFilter() 降低跨站脚本(XSS)攻击的风险

跨站点脚本 (XSS) 是一种常见的攻击类型,恶意脚本被注入易受攻击的页面,目的是窃取会话 cookie 或密码等敏感数据。

降低 XSS 攻击风险的基本规则很简单:“永远不要相信用户的输入”。作为开发人员,您应该始终清理来自外部的所有输入。这包括来自表单、GET 查询 url,甚至来自 POST 正文的数据。清理意味着您应该找到并编码可能有危险的字符,例如 <、>。

现代浏览器可以通过采用更好的软件策略来帮助降低风险。通常这些可以通过 http 标头进行配置。

X-XSS-Protection HTTP 标头是一种基本保护。浏览器使用启发式过滤器检测潜在的注入脚本。如果启用了标头,浏览器会更改脚本代码,将其中和。它的支持仍然有限。

例子:

Using helmet.xssFilter() to sanitize input sent to your server.

避免使用helmet.noSniff() 推断响应MIME 类型

浏览器可以使用内容或 MIME 嗅探来覆盖响应 内容类型 使用隐式内容类型猜测和处理数据的标头。虽然这在某些情况下很方便,但也可能导致一些危险的攻击。此中间件将 X-Content-Type-Options 标头设置为 不闻不问 ,指示浏览器不要绕过提供的 内容类型 .

例子:

Using the helmet.noSniff() method on your server.

使用helmet.ieNoOpen() 防止IE 打开不受信任的HTML

一些 Web 应用程序将提供不受信任的 HTML 以供下载。默认情况下,某些版本的 Internet Explorer 在您的站点上下文中打开这些 HTML 文件。这意味着不受信任的 HTML 页面可能会在您的页面上下文中开始做坏事。此中间件将 X-Download-Options 标头设置为 noopen。这将阻止 IE 用户在受信任站点的上下文中执行下载。

例子:

Setting the X-Download_Options header to noopen.

使用helmet.hsts() 要求浏览器仅通过HTTPS 访问您的站点

HTTP 严格传输安全 (HSTS) 是一种 Web 安全策略,有助于保护网站免受协议降级攻击和 cookie 劫持。如果您的网站可以通过 HTTPS 访问,您可以要求用户的浏览器避免使用不安全的 HTTP。通过设置标头 Strict-Transport-Security,您可以告诉浏览器在指定时间内对未来的请求使用 HTTPS。这将适用于初始请求之后的请求。

例子:

Forcing to use HTTPS for the next 90 days.

使用helmet.dnsPrefetchControl()禁用DNS预取

为了提高性能,大多数浏览器会为页面中的链接预取 DNS 记录。这样,当用户单击链接时,目标 ip 就已经知道了。这可能会导致过度使用 DNS 服务(如果您拥有一个大型网站,有数百万人访问......)、隐私问题(窃听者可能会推断您在某个页面上)或页面统计信息更改(某些链接可能即使他们没有被访问过)。如果您有很高的安全需求,您可以禁用 DNS 预取,但代价是性能损失。

例子:

Using the helmet.dnsPrefetchControl() method on the server.

使用helmet.noCache() 禁用客户端缓存

如果您正在为您的网站发布更新,并且您希望用户始终下载较新版本,您可以(尝试)禁用客户端浏览器上的缓存。它在开发中也很有用。缓存具有性能优势,您将失去这些优势,因此仅在真正需要时才使用此选项。

例子:

Using the helmet.noCache() method on the server.

使用helmet.contentSecurityPolicy() 设置内容安全策略

通过设置和配置内容安全策略,您可以防止将任何意外内容注入您的页面。这将保护您的应用免受 XSS 漏洞、不受欢迎的跟踪、恶意帧等的侵害。 CSP 通过定义受信任的内容源的允许列表来工作。您可以为网页可能需要的每种资源(脚本、样式表、字体、框架、媒体等)配置它们。有多个指令可用,因此网站所有者可以进行精细控制。有关详细信息,请参阅 HTML 5 Rocks、KeyCDN。不幸的是,旧版浏览器不支持 CSP。

默认情况下,指令是完全开放的,因此将 defaultSrc 指令设置为备用指令很重要。 Helmet 支持 defaultSrc 和 default-src 命名样式。回退适用于大多数未指定的指令。

例子:

Setting the content security policy of the web application.

使用“父”头盔()中间件配置头盔:

app.use(helmet()) 将自动包含上面介绍的所有中间件,除了 noCache() 和 contentSecurityPolicy(),但如果需要,可以启用这些。您还可以使用配置对象单独禁用或配置任何其他中间件。

例子:

Configure Helmet Using the ‘parent’ helmet() Middleware

谢谢阅读!

未来请关注更多信息技术、编程和网络安全!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/38762/25482311

posted @ 2022-09-23 11:26  哈哈哈来了啊啊啊  阅读(365)  评论(0编辑  收藏  举报