首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为你的网站带上帽子—使用 helmet 保护 Express 应用

Express 基于 Node.js,是一款用于构建 Web 服务的优秀框架。它很容易上手,且得益于其中间件的概念,可以很方便地进行配置与拓展。尽管现在有各种各样的用于创建 Web 应用的框架,但我的第一选择始终是 Express。然而,直接使用 Express 不能完全遵循安全性的最佳实践。因此我们需要使用类似 的模块来改善应用的安全性。

部署

在开始之前,请确认你已经安装好了 Node.js 以及 npm(或 yarn)。你可以在 Node.js 官网下载以及查看安装指南。

我们将以一个新的工程为例,不过你也可以将这些功能应用于现有的工程中。

在命令行中运行以下命令创建一个新的工程:

运行以下命令安装 Express 模块:

在 目录下创建一个名为 的文件,加入以下代码:

保存文件,试运行看看它是否能正常工作。运行以下命令启动服务:

访问 http://localhost:3000,你应该可以看到 。

检查 Headers

现在让我们通过增加与删除一些 HTTP headers 来改善应用安全性。你可以用一些工具来检查它的 headers,例如使用 运行以下命令:

标志可以让其输出 response 的 HTTP headers。如果你没有安装 ,也可以用你最常用浏览器开发者工具的 network 面板代替。

你可以看到在收到的 response 中包含的以下 HTTP headers:

一般来说,由 开头的 header 是非标准头部。请注意那个 的 header,它会暴露你使用的框架。对于攻击者来说,这可以降低攻击成本,因为他们只专注攻击此框架的已知漏洞即可。

戴上头盔(helmet)来看看如果我们使用会发生什么。运行以下命令安装:

将 中间件加入你的应用中。对 进行如下修改:

这样就使用了 的默认配置。接下来看看它做了什么事情。重启服务,再次通过以下命令检查 HTTP headers:

新的 headers 会类似于下面这样:

首先值得庆祝的是 header 不见了。但现在又多了好些新的 header,它们是做什么的呢?

X-DNS-Prefetch-Control

这个 header 对增加安全性并没有太大作用。它的值为 时,将关闭浏览器对页面中 URL 的 DNS 预读取。DNS 预读取可以提高你的网站的性能,根据 MDN 描述,它可以增加 5% 或更高的图片加载速度。不过开启这项功能也可能会使用户在多次访问同一个网页时缓存出现问题。

译注:缓存问题未查到资料,如果您了解这块请留言

它的默认值是 ,如果你希望通过它提升性能,可以在调用 时传入 开启 DNS 预读取。

X-Frame-Options

可以让你控制页面是否能在 、 或者 之类的页框内加载。除非你的确需要通过这些方式来打开页面,否则请通过下面的配置完全禁用它:

所有的现代浏览器都支持 。你也可以通过稍后将介绍的内容安全策略来控制它。

Strict-Transport-Security

它也被称为 HSTS(严格安全 HTTP 传输),用于确保在访问 HTTPS 网站时不出现协议降级(回到 HTTP)的情况。如果用户一旦访问了带有此 header 的 HTTPS 网站,浏览器就会确保将来再次访问次网站时不允许使用 HTTP 进行通信。此功能有助于防范中间人攻击。

有时,当你使用公共 WiFi 时尝试访问 https://google.com 之类的门户网页时就能看到此功能运作。WiFi 尝试将你重定向到他们的门户网站去,但你曾经通过 HTTPS 访问过 ,且它带有 的 header,因此浏览器将阻止重定向。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180207G013JW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券