Node.js 使用 Helmet.js 保护应用程序
Helmet.js是一个有助于保护 HTTP 标头的 Node.js 模块。它在快速应用程序中实现。因此,我们可以说helmet.js 有助于保护快速应用程序。它设置了各种 HTTP 标头以防止跨站点脚本(XSS)、点击劫持等攻击。
为什么 HTTP 标头的安全性很重要:有时开发人员会忽略 HTTP 标头。由于 HTTP 标头可能会泄漏有关应用程序的敏感信息,因此以安全的方式使用标头非常重要。
Helmet.js 中包含的节点模块有: Helmet.js 带有更多内置模块,用于提高 Express 应用程序的安全性。
- Content-Security-Policy:设置安全策略。
- Expect-CT:用于处理证书透明度。
- X-DNS-Prefetch-Control:用于控制浏览器DNS的获取。
- X-Frame-Options:用于防止 ClickJacking。
- X-Powered-By:用于移除 X-Powered-By 标头。 X-Powered-By 标头泄露了服务器及其供应商的版本。
- Public-Key-Pins:用于 HTTP 公钥固定。
- Strict-Transport-Security:用于 HTTP 严格传输策略。
- X-Download-Options:它限制为各种下载选项。
- 缓存控制:用于禁用客户端缓存。
- X-Content-Type-Options:用于防止嗅探攻击。
- Referrer-Policy:用于隐藏referrer header。
- X-XSS-Protection:用于为 XSS 攻击添加保护。
如何检查 HTTP 标头:要检查标头,首先右键单击要检查的页面。现在,单击检查元素。之后打开网络选项卡。网络选项卡将如下所示:
一开始它会是空的。在网络选项卡中,将显示浏览器发出的所有 HTTP 请求。
先决条件:
- 您选择的 IDE。
- Node.js 安装在您的系统中。
- 了解 Node.js 和 express 应用程序。
设置一个基本的快递应用程序:
- 首先使用package.json文件初始化应用程序。编写以下命令:
npm init
- 使用以下命令安装 express 模块:
npm install express --save
下面显示的是我们的 package.json 文件:
{ "name": "HelmetJs", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Pranjal Srivastava", "license": "ISC", "dependencies": { "express": "^4.17.1", } }
- 创建一个文件,我们将在其中编写我们的 javascript 代码。例如, app.js 。您可以随意命名文件。现在,编写以下代码来设置服务器:
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send("This is the Demo page for" + " setting up express server !") }); app.listen(3000, (err) => { if (err) { console.log(err); } else { console.log('Server started " + "at http://localhost:3000'); } });
- 使用以下命令运行 app.js 文件:
node app.js
上述命令的输出如下所示:
Server started at http://localhost:3000
- 打开浏览器并转到http://localhost:3000 。再次打开网络选项卡,您将在那里看到浏览器发出的请求列表。选择localhost请求,您将看到如下响应标头列表:
HTTP/1.1 304 Not Modified X-Powered-By: Express ETag: W/"35-QqeUaYjSJ35gtyT3DcgtpQlitTU" Date: Thu, 04 Jun 2020 15:55:00 GMT Connection: keep-alive
在 express 应用程序中设置和实现 Helmet.js:
- 要安装helmet.js模块,请编写以下命令:
npm install helmet --save
- 在app.js文件中,编写以下代码来使用头盔模块:
const express = require('express'); const helmet = require('helmet'); const app = express(); app.use(helmet()); app.get('/', (req, res) => { res.send("This is the Demo page for" + " setting up express server !") }); app.listen(3000, (err) => { if (err) { console.log(err); } else { console.log('Server started " + "at http://localhost:3000'); } });
- 使用以下命令启动服务器:
node app.js
- 通过单击检查元素打开网络选项卡。单击localhost ,您会注意到一组额外的标题作为响应。标题如下:
HTTP/1.1 304 Not Modified X-DNS-Prefetch-Control: off X-Frame-Options: SAMEORIGIN Strict-Transport-Security: max-age=15552000; includeSubDomains X-Download-Options: noopen X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block ETag: W/"35-QqeUaYjSJ35gtyT3DcgtpQlitTU" Date: Thu, 04 Jun 2020 16:11:37 GMT Connection: keep-alive
在这里,我们的helmet.js模块应用了新的标题集。添加这些标头是为了提高安全性。
结论: Helmet.js模块对 NodeJs 开发人员非常有用,因为它为 express 应用程序增加了安全性。在本教程中,我们了解了helmet.js,并在一个基本的 express 应用程序中看到了它的实现。