使用 Koa-helmet 模块增强安全性

阅读时长 6 分钟读完

在网页开发中,安全性一直是一个比较重要的问题。为了保证网站及用户的安全,我们需要在后端编写代码的过程中采用一些安全工具来进行保护。而 Koa-helmet 就是我们可以使用的安全工具之一。

Koa-helmet 是什么?

Koa-helmet 是一个专为 Koa 框架编写的安全性增强模块,它将一些安全相关的 HTTP 头部信息自动添加到 HTTP 响应当中,从而帮助我们避免一些潜在的安全问题。

如何安装 Koa-helmet?

我们可以使用 npm 或 yarn 来安装 Koa-helmet,具体方式如下:

使用 Koa-helmet

在安装完 Koa-helmet 后,我们需要在 Koa 应用程序中引入它,然后当中间件使用它。

上述代码将会自动在 HTTP 响应头部添加了如下内容:

  • X-DNS-Prefetch-Control
  • X-Frame-Options
  • Strict-Transport-Security
  • X-Download-Options
  • X-Content-Type-Options
  • X-XSS-Protection

如果我们需要某些 HTTP 头部信息,我们可以使用选项来设置。比如:

-- -------------------- ---- -------
----------------
  ----------- -
    ------- ------
  --
  ---------------------- -
    ----------- -
      ----------- -----------
      --------- -------- ------------------
      ------- ----------
      -- --------------
      -- ---
    -
  -
----

在上述代码中,我们禁用了 X-Frame-Options 头部信息,并配置了一个允许图片 data URL 的安全策略。

安全性相关 HTTP 头部信息

接下来,我们来至详细介绍一下 Koa-helmet 能够添加的安全信息:

DNS prefetch 控制

DNS prefetch 是浏览器在页面加载之前解析域名的一种特性。虽然在一些情况下可以加速页面加载,但也可能存在一些私人信息泄露的问题。因此,在信任的站点中启用 DNS 预存取是安全合理的,对于其他站点,我们可以添加 X-DNS-Prefetch-Control 来禁用预取。

Frame 控制

通过 X-Frame-Options 头部信息,我们可以控制浏览器是否允许在一个 frame、iframe 或 object 中加载一个页面。其有一些可选的值:

  • DENY:表示页面不能嵌入到框架中,不是相同域的 iframe 也无法实现嵌入。
  • SAMEORIGIN:表示页面可以嵌入到相同域中的框架中,但是不能被嵌入到相异域中的框架中。
  • ALLOW-FROM url: 允许嵌入到指定的 URL

HTTP转换

X-Content-Type-Options 用于防止浏览器将资源 MIME 类型转换成错误的类型。出于安全原因,该头部应始终设置为 nosniff (不默认转换)。

跨站点请求伪造

CSRF 攻击是一种多利用 Web 应用程序中的漏洞来对目标用户执行未经许可的操作的攻击方式。其中一种防范供应链拦截攻击的方式是使用 SameSite 属性,在浏览器当前站点范围内防止 Cookie 的分配,从而减少了 CSRF 攻击的可行性。但是,这种方案取决于浏览器支持。

Strict-Transport-Security

当使用 HTTPS 时,我们可以将 Strict-Transport-Security 头部添加到我们的应用中,从而告知浏览器使用 HTTPS 访问此站点而不是通过 http。

下载控制

当用户下载文件时,X-Download-Options 浏览器可以帮助我们设置如何处理下载。我们可以选择将该头部设置为 noopen,这样用户就不能直接打开下载的文件,只能选择保存到本地,从而减少了一些下载文件所导致的攻击。

MIME 类型嗅探

IE 和 Chrome 浏览器具有MIME类型嗅探的能力,会在服务器返回的 content-type 头缺失或不属于一级类型(text),而文件内容又非常类似某一级类型时进行自动纠正,这就开启了漏洞突破口可能。因此,我们需要添加X-Content-Type-Options,设置为nosniff。

Referrer 控制

Referer 是客户端在访问网页时自动发送的一个 HTTP 头部信息,其中包含了来源网页的 URL,也就是点击链接的地方。我们可以通过 X-Referrer-Policy 在 HTTP 响应中控制 Referrer 数据的发放。它有一些可选值:

  • no-referrer
  • no-referrer-when-downgrade
  • origin
  • origin-when-cross-origin
  • same-origin
  • strict-origin
  • strict-origin-when-cross-origin
  • unsafe-url

示例代码

下面是一个完整的 Koa 应用程序,其中包含了 Koa-helmet 模块的使用。它会将上述介绍到过的所有 HTTP 头部信息都添加到 HTTP 响应头部当中。虽然这并不是所有的头部信息都非常必要,但是可以作为一个适用于大多数场景的样例代码。

-- -------------------- ---- -------
----- --- - ---------------
----- ------ - ----------------------

----- --- - --- ------

----------------
  ------------------- ------
  ----------- -
    ------- ------
  --
  ---------------------- -
    ----------- -
      ----------- -----------
      --------- -------- ------------------
      ------- ----------
      ---------- ---------- ------------------
    -
  --
  --------------- - ------- ------------- --
  ----- -
    ------- ---------
    ------------------ ----
  --
  -------- ----
---

----------- -- -
  -------- - ------ -------
---

-----------------
------------------- ------- -- -------------------------

总结

在本篇文章中,我们介绍了 Koa-helmet 模块的使用。我们了解了它可以为我们自动添加的一些安全相关 HTTP 头部信息,并且我们具体讲解了每个头部的作用和设置方式。希望这些内容能够帮助大家更好地使用和理解 Koa-helmet,从而提高他们的 Web 应用程序的安全性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648aec0448841e989493e222

纠错
反馈