📅  最后修改于: 2023-12-03 15:38:22.037000             🧑  作者: Mango
在网络应用程序中,为了保护服务器避免被攻击,我们需要对来自客户端的请求进行限制,以达到防止攻击的目的。为了实现请求限制,我们可以使用 express-rate-limit 插件,它是一个基于 Express 的请求限制中间件。该插件可以帮助我们限制同一个 IP 在一定时间内发送请求的数量,并可以自定义限制的时间窗口和最大请求数量。
npm install --save express-rate-limit
要使用这个插件,我们需要在我们的 Express 应用程序中初始化它。为了使用它,我们需要在我们的代码中引入它,使用以下代码:
const rateLimit = require("express-rate-limit");
为了配置插件,我们需要传递一个配置对象作为参数。它可以包括以下选项:
下面是一个配置示例:
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100,
message: "Too many requests!"
});
接下来,我们需要将限制器插入我们的应用程序中。为了将插件添加到单个路由可以使用以下代码:
app.get("/api", limiter, (req, res, next) => {
// handle request
});
如果要对所有路由应用限制,则可以使用以下代码:
app.use(limiter);
下面是一个包括多个路由和自定义消息的完整示例:
const express = require("express");
const rateLimit = require("express-rate-limit");
const app = express();
// initialize limiter
const limiter = rateLimit({
windowMs: 60 * 60 * 1000, // 1 hour
max: 500,
message: "Too many requests, please try again later."
});
// apply limiter to all routes
app.use(limiter);
// handle / route
app.get("/", (req, res) => {
res.send("Hello World!");
});
// handle /api route
app.get("/api", (req, res) => {
res.send("This is my API.");
});
// listen for requests
app.listen(3000, () =>
console.log("Server is listening on port 3000.")
);
在这个例子中,在一小时内,对于来自同一 IP 的请求,最多只能发送 500 次请求。对于超出限制的请求,服务器会返回自定义消息 "Too many requests, please try again later."。
此插件是一个简单且易于使用的请求限制中间件,它可以保护我们的服务器免受攻击。它的配置选项提供了足够的灵活性,以满足大多数需求。