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 版权协议,转载请附上原文出处链接和本声明