在网页开发中,安全性一直是一个比较重要的问题。为了保证网站及用户的安全,我们需要在后端编写代码的过程中采用一些安全工具来进行保护。而 Koa-helmet 就是我们可以使用的安全工具之一。
Koa-helmet 是什么?
Koa-helmet 是一个专为 Koa 框架编写的安全性增强模块,它将一些安全相关的 HTTP 头部信息自动添加到 HTTP 响应当中,从而帮助我们避免一些潜在的安全问题。
如何安装 Koa-helmet?
我们可以使用 npm 或 yarn 来安装 Koa-helmet,具体方式如下:
npm install koa-helmet # 或 yarn add koa-helmet
使用 Koa-helmet
在安装完 Koa-helmet 后,我们需要在 Koa 应用程序中引入它,然后当中间件使用它。
const Koa = require('koa'); const helmet = require('koa-helmet'); const app = new Koa(); app.use(helmet()); // 其他路由及中间件
上述代码将会自动在 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