📜  Node.js 使用 Helmet.js 保护应用程序

📅  最后修改于: 2022-05-13 01:56:50.034000             🧑  作者: Mango

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 请求。

先决条件:

  1. 您选择的 IDE。
  2. Node.js 安装在您的系统中。
  3. 了解 Node.js 和 express 应用程序。

设置一个基本的快递应用程序:

  1. 首先使用package.json文件初始化应用程序。编写以下命令:
    npm init
  2. 使用以下命令安装 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",
      }
    }
    
  3. 创建一个文件,我们将在其中编写我们的 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'); }
    });
    
  4. 使用以下命令运行 app.js 文件:
    node app.js

    上述命令的输出如下所示:

    Server started at http://localhost:3000
  5. 打开浏览器并转到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:

  1. 要安装helmet.js模块,请编写以下命令:
    npm install helmet --save
  2. 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'); }
    });
    
  3. 使用以下命令启动服务器:
    node app.js
  4. 通过单击检查元素打开网络选项卡。单击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 应用程序中看到了它的实现。