发布于 2026-01-05 1 阅读
0

5 个 NPM 包,5 分钟内保护您的 Node.js 后端 Helmet 公告 HPP Express Mongo Sanitize express-rate-limit

5 个 NPM 包,5 分钟内保护你的 Node.js 后端

头盔

公告

高压灭菌

Express Mongo Sanitize

express-rate-limit

当你开始关注后端性能和安全性,并与其他功能并重时,你就知道自己作为一名开发者正在成长和成熟。毋庸置疑,即使只是一个业余项目,采取一些安全措施来抵御常见的攻击也至关重要。

如果您是安全新手,或者想快速上手一些基础防护措施,这 5 个 NPM 包可以帮助您在几分钟内入门。这些包最棒的地方在于,您只需安装它们,即可将它们用作中间件。就是这么简单!

时间紧迫或者只需要软件包列表?以下是我将要介绍的 5 个 NPM 软件包:

软件包名称 包裹链接
头盔 NPM链接
xss-clean NPM链接
高压 NPM链接
express-mongo-sanitize NPM链接
快递速率限制 NPM链接

头盔

它的作用:设置与安全相关的 HTTP 响应标头,以防止一些众所周知的网络漏洞。

它能防止哪些攻击:跨站脚本攻击、跨站注入、点击劫持、MIME 嗅探以及通过禁用X-Powered-By标头针对 Express 服务器的定向攻击。

使用方法:



npm install helmet


Enter fullscreen mode Exit fullscreen mode


const app = require('express')();
const helmet = require('helmet');

// Using helmet middleware
app.use(helmet());

app.listen(1337);


Enter fullscreen mode Exit fullscreen mode

GitHub 标志 头盔js /头盔

使用各种 HTTP 标头帮助保护 Express 应用的安全。

头盔

通过设置HTTP响应标头来帮助保护Express应用程序的安全。

import helmet from "helmet";

const app = express();

app.use(helmet());
Enter fullscreen mode Exit fullscreen mode

Helmet 默认设置以下标头:

XSS-Clean

它的功能:清理来自 POST 请求正文 ( req.body)、 GET 请求查询 ( req.query) 和 URL 参数 ( req.params) 的用户输入。

它能防范什么:跨站脚本/XSS攻击。

使用方法:



npm install xss-clean


Enter fullscreen mode Exit fullscreen mode


const app = require('express')();
const xssClean = require('xss-clean');

// Protect against XSS attacks, should come before any routes
app.use(xssClean());

app.listen(1337);


Enter fullscreen mode Exit fullscreen mode

GitHub 标志 jsonmaur / xss-clean

用于清理用户输入的中间件

公告

此库已弃用。其实现非常简单,我建议您使用xss-filters依赖项将源代码直接复制到您的应用程序中,或者寻找功能更丰富、更完善的替代库。感谢您的支持。


Node.js Connect 中间件,用于清理来自 POST 请求体、GET 请求和 URL 参数的用户输入。可与ExpressRestify或任何其他Connect应用配合使用。

如何使用

npm install xss-clean --save
Enter fullscreen mode Exit fullscreen mode
const restify = require('restify')
const xss = require('xss-clean')

const app = restify.createServer()

app.use(restify.bodyParser())

// make sure this comes before any routes
app.use(xss())

app.listen(8080)
Enter fullscreen mode Exit fullscreen mode

req.body这将清除`<path>`、req.query`<path>` 和 `<path> ` 中的所有数据req.params。您还可以……

高压灭菌

它的作用是:将数组参数放入req.queryand/orreq.body语句块中,并仅选择最后一个参数值,以避免 HTTP 参数污染攻击。

它能防止什么:绕过输入验证和通过异步代码中未捕获的拒绝服务 (DoS) 攻击TypeError,从而导致服务器崩溃。

使用方法:



npm install hpp


Enter fullscreen mode Exit fullscreen mode


const app = require('express')();
const hpp = require('hpp');

// Protect against HPP, should come before any routes
app.use(hpp());

app.listen(1337);


Enter fullscreen mode Exit fullscreen mode

GitHub 标志 模拟尼科/ hpp

使用 Express 中间件来防御 HTTP 参数污染攻击

高压灭菌

使用 Express中间件来防御 HTTP 参数污染攻击

构建状态 覆盖范围状态 依赖状态

为什么?

切坦·卡兰德的幻灯片来解释这一切吧:

第48页 第49页 第50页 幻灯片54

……而漏洞利用可能导致绕过输入验证,甚至导致拒绝服务

HPP究竟是如何解决这个问题的?

HPP 会将数组参数放入req.query`and/or`req.body语句块中,并仅选择最后一个参数值。添加中间件后,就完成了。

安装

NPM统计数据

这是一个适用于 node.js 和 io.js 的模块,可通过 npm 安装:

npm install hpp --save
Enter fullscreen mode Exit fullscreen mode

入门

添加HPP中间件的方式如下:

// ...
var hpp = require('hpp');
// ...
app.use(bodyParser.urlencoded()); // Make sure the body is parsed beforehand.

app.use(hpp()); // <- THIS IS THE NEW LINE

// Add your own middlewares afterwards, e.g.:
app.get('/search',
Enter fullscreen mode Exit fullscreen mode

Express Mongo Sanitize

它的功能是:搜索对象中以$符号开头或包含.from req.bodyreq.queryor 的任何键req.params,并删除此类键和数据,或将禁止的字符替换为另一个允许的字符。

它能防范什么: MongoDB 操作符注入。恶意用户可以发送包含操作符的对象$,或者包含一个 `<input type="print">`元素.,这可能会改变数据库操作的上下文。

使用方法:



npm install express-mongo-sanitize


Enter fullscreen mode Exit fullscreen mode


const app = require('express')();
const mongoSanitize = require('express-mongo-sanitize');

// Remove all keys containing prohibited characters
app.use(mongoSanitize());

app.listen(1337);


Enter fullscreen mode Exit fullscreen mode

GitHub 标志 fiznool / express-mongo-sanitize

对 Express 有效负载进行清理,以防止 MongoDB 操作符注入。

Express Mongo Sanitize

Express 4.x 中间件,用于清理用户提供的数据,以防止 MongoDB Operator 注入。

构建状态 npm 版本 每周 npm 下载量 依赖状态

这个模块是做什么用的?

$此模块搜索对象中以逗号开头或包含逗号.、逗号req.bodyreq.query逗号req.headers或逗号的键req.params。然后,它可以执行以下操作之一:

  • 从对象中完全删除这些键及其关联数据,或者
  • 将禁用字符替换为允许的字符。

该行为由传递的选项控制replaceWith。设置此选项可使清理器将禁止的字符替换为传递的字符。

allowDots可以通过配置选项允许用户提供的数据中包含点号。在这种情况下,只有点号$会被清理。

更多示例请参见规范文件。

为什么需要它?

以 a 开头$或包含 a 的对象键被 MongoDB 保留.用作运算符……

快递费率限制

其作用:用于限制 IP 地址对 API 端点的重复请求。例如,可以限制用于发送密码重置邮件的端点的请求频率,因为重复请求可能会产生额外费用。

它可以防御:暴力破解、拒绝服务 (DoS) 攻击和分布式拒绝服务 (DDoS) 攻击。

使用方法:



npm install express-rate-limit


Enter fullscreen mode Exit fullscreen mode


const app = require('express')();
const rateLimit = require('express-rate-limit');

// Restrict all routes to only 100 requests per IP address every 1o minutes
const limiter = rateLimit({
    windowMs: 10 * 60 * 1000,    // 10 minutes
    max: 100                     // 100 requests per IP
});
app.use(limiter);

app.listen(1337);


Enter fullscreen mode Exit fullscreen mode

GitHub 标志 快速速率限制/快速速率限制

Express Web 服务器的基本速率限制中间件

express-rate-limit

测试 npm 版本 npm 下载 执照

用于Express的基本限速中间件。用于限制对公共 API 和/或端点(例如密码重置)的重复请求。与express-slow-downratelimit-header-parser配合使用效果良好。

用法

完整的文档可在网上查阅。

import { rateLimit } from 'express-rate-limit'

const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 minutes
    limit: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes).
    standardHeaders: 'draft-7', // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
    legacyHeaders: false, // Disable the `X-RateLimit-*` headers.
    // store: ... , // Redis, Memcached, etc. See below.
})

// Apply the rate limiting middleware to all requests.
app.use(limiter)
Enter fullscreen mode Exit fullscreen mode

数据存储

该速率限制器带有内置存储器,并支持各种外部数据存储

配置

所有函数选项都可以是异步的……


只需 5 分钟,即可借助这 5 个 NPM 包大幅提升您的 Node.js + Express.js 应用的安全性。以上所有包都极其易用,只需导出并作为中间件即可。

你们采取了哪些安全措施?或者我漏掉了你们喜欢的哪些包裹?请在下方留言告诉我,我很乐意听听你们的想法。

文章来源:https://dev.to/itsnitinr/5-npm-packages-to-secure-your-node-js-backend-in-5-minutes-2732