āļŠāļĢāļļāļāļŠāļąāđāļ āđ āļāđāļāļāđāļĢāļīāđāļĄāļāđāļēāļ
āļāļēāļĢāļāļģ Rate Limiting āđāļ Express.js āđāļāļĒāđāļāđ Library āļāļ·āđāļ express-rate-limit āđāļāđāļ 1 āđāļāļ§āļīāļāļĩāļāļēāļĢāļāļĩāđāļāđāļēāļĒāđāļĨāļ°āđāļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļāļāļđāđāļāļąāļāļāļēāļāļĩāđāđāļĄāđāļāđāļāļāļāļēāļĢāļāļ§āļēāļĄāļĒāļļāđāļāļĒāļēāļāđāļāļāļēāļĢāđāļāđāļ§āļīāļāļĩāļāļēāļĢāļāļ·āđāļ āđ āđāļāļāļēāļĢāļāđāļāļāļāļąāļ DDoS Attack āļŦāļĢāļ·āļ DoS Attack āļāļķāđāļāļŠāļēāļĄāļēāļĢāļāļāđāļ§āļĒāļĨāļāđāļ§āļĨāļē āđāļĨāļ°āļāļ§āļēāļĄāļāļąāļāļāđāļāļ āđāļāļāļēāļĢāļāļąāļāļāļēāļĨāļāđāļāđ
Rate Limiting āđāļ API āļāļ·āļāļāļ°āđāļĢ
Rate Limiting āļāļ·āļāļāļēāļĢāļāļģāļŦāļāļāļāļģāļāļ§āļ āđāļāļ§āļāđāļē āđāļāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļāļąāļ§ API āļāđāļēāļ āđ āđāļāļĒāļāļ°āļāļģāļŦāļāļāđāļāļĨāļąāļāļĐāļāļ° āļāļģāļāļ§āļāļāļĢāļąāđāļ āļāđāļ āđāļ§āļĨāļē āđāļāđāļ 100 āļāļĢāļąāđāļ āļāđāļ 1 āļāļēāļāļĩ āļŠāļģāļŦāļĢāļąāļ 1 āļāļđāđāđāļāđāļāļēāļ āđāļāļ·āđāļāļāđāļāļāļāļąāļāļāļąāļ§ API āļŦāļĢāļ·āļ server āļāļģāļāļēāļāļŦāļāļąāļāđāļāļīāļāđāļ āđāļāļ·āđāļāļāļāļēāļāļĄāļĩāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļāļģāļāļ§āļāļĄāļēāļ āļāļāļĨāđāļĄāđāļāļāļĩāđāļŠāļļāļ āļŦāļĢāļ·āļ āđāļāļ·āđāļāđāļāļĢāđ āļāļĢāļąāļāļĒāļēāļāļĢ āđāļŦāđāļāļđāđāđāļĢāļĩāļĒāļāđāļāđ API āđāļāđāļāļģāļāļ§āļāđāļāđāļē āđ āļāļąāļ āđāļāļĒāļŦāļĨāļąāļ āđ āļāļ°āļāļīāļĒāļĄāđāļāđāđāļāļāļēāļĢāļāđāļāļāļāļąāļāļāļēāļĢāļāļģāļāļēāļĢāđāļāļĄāļāļĩāđāļāļ DDoS Attack āļŦāļĢāļ·āļ Dos Attack āđāļŠāđ API
DDoS Attack āđāļĨāļ° Dos Attack āļāļ·āļāļāļ°āđāļĢ
Distributed Denial of Service āļŦāļĢāļ·āļ āđāļĢāļĩāļĒāļāļāļąāļāļ§āđāļēāļŠāļąāđāļ āđ āļ§āđāļē DDoS āļāļ·āļāļāļēāļĢāđāļāļĄāļāļĩāļāļēāļāđāļāđāļāļāļĢāđāļĢāļđāļāđāļāļāļŦāļāļķāđāļ āđāļāļĨāļąāļāļĐāļāļ° āļāļĩāđāļĄāļĩāļāļēāļĢāļŠāđāļāļāļģāļāļāđāļāđāļēāļāļķāļāļāđāļāļĄāļđāļĨāļāļģāļāļ§āļāļĄāļēāļ āđ āļāļĢāđāļāļĄāļāļąāļ āļĄāļēāļāđāļāļīāļāļāļ§āđāļē API āļŦāļĢāļ·āļ Server āļāļ°āļĢāļąāļāđāļāđ (āļĄāļĩāļāļąāđāļāđāļāđāļāļēāļĢāļāļ F5 āļĒāļąāļāđāļāđāļāļēāļĢāđāļāļĩāļĒāļ Script āđāļāļ·āđāļāļāļģāļāļēāļĢāđāļāļĄāļāļĩ) āļāļķāđāļ Denial of Service āļŦāļĢāļ·āļ Dos āļāđāļĄāļĩāļĨāļąāļāļĐāļāļ°āđāļŦāļĄāļ·āļāļāļāļąāļāļāđāļēāļāļāļąāļāļāļĩāđ DDoS āļāļ°āļĄāļĩāļāļēāļĢāđāļāļĄāļāļĩāļāļēāļāļŦāļĨāļēāļĒāļāļĩāđ āļŠāđāļ§āļ Dos āļāļ°āļĄāļēāļāļēāļāđāļŦāļĨāđāļāđāļāļĩāļĒāļ§ āļāļķāđāļāļāļēāļĢāļāļģ Rate Limiting āđāļ API āļāđāđāļāđāļ 1 āđāļāļ§āļīāļāļĩāļāļēāļĢāļāđāļāļāļāļąāļ
āļāļēāļĢāļāļģ Rate Limiting āđāļ API āļāļ Express.JS
āđāļāļĒāđāļāļāļēāļĢāļāļģ Rate Limiting āđāļ API āļāļ°āļĄāļĩ 2 āļĢāļđāļāđāļāļāļŦāļĨāļąāļ āđ āđāļāļāļēāļĢāļāļģāļŦāļāļāļāļąāļ§āļāļāļāļāļāļāļđāđāļāļĩāđāđāļĢāļĩāļĒāļāđāļāđāļāļēāļ API
- āļāļēāļĢāļāļģāļŦāļāļāļāļąāļ§āļāļāđāļāļĒāđāļāđ IP Address āļāļāļāļāļđāđāđāļĢāļĩāļĒāļāđāļāđ āđāļŦāļĄāļēāļ°āļāļąāļāļāļēāļĢāļāļēāļāļāļĩāđāđāļĄāđāļĄāļĩāļāļēāļĢāļāđāļāļāđāļŦāđāļĄāļĩāļāļēāļĢāļŠāļĄāļąāļāļĢāđāļāđāļāļēāļ āđāļāļ·āđāļāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļđāđāđāļāđ āđāļāđāļāļ°āļĄāļĩāļāđāļāđāļŠāļĩāļĒāļāļĩāđ āļāļđāđāļāļģāļāļēāļĢāđāļāļĄāļāļĩāļŠāļēāļĄāļēāļĢāļāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ IP āđāļāļĒāđāļāđ Proxy āļŦāļĢāļ·āļ VPN āđāļāđ (āļŦāļĢāļ·āļāļāļĩāļāļ§āļīāļāļĩāļāļ·āļ Restart Router āļāļīāļāđāļāļāļĢāđāđāļāđāļ) āļāļķāđāļāļāļ°āļāļģāđāļŦāđ Rate Limiting āđāļĢāđāļāļĢāļ°āđāļĒāļāļāđ
- āļāļēāļĢāļāļģāļŦāļāļāļāļąāļ§āļāļāđāļāļĒāđāļāđāļāđāļāļĄāļđāļĨāļāļđāđāđāļāđ āļŦāļĢāļ·āļ Token āđāļŦāļĄāļēāļ°āļāļąāļāļāļēāļĢāļāļēāļāļāļĩāđāļĄāļĩāļāļēāļĢāļāđāļāļāđāļŦāđāļĄāļĩāļāļēāļĢāļŠāļĄāļąāļāļĢāđāļāđāļāļēāļ āđāļāļ·āđāļāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļđāđāđāļāđāļāļēāļ
āļĄāļēāļŠāļđāđāļāļēāļĢāļāļģ Rate Limiting āļāļ Express.js Framework āđāļāļĒāđāļāļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āđāļĨāļ·āļāļāđāļāđ Library Middleware āļŠāļģāļŦāļĢāļąāļ Express.js āļāļ·āđāļ express-rate-limit āļāļķāđāļāđāļāđāļ§āļīāļāļĩāļāļēāļĢāļāļģāļŦāļāļ IP Address āļāļāļāļāļđāđāđāļĢāļĩāļĒāļāđāļāđ āđāļāļĒāđāļāļāļāļāļ§āļēāļĄāļāļ°āļāļāļāđāļēāļĄāđāļāļŠāđāļ§āļāļāļēāļĢāđāļāđ express.JS āđāļāļāļĢāļąāļ āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļāļēāļ Express.JS āđāļāļ·āđāļāļāļāđāļ āļŠāļēāļĄāļēāļĢāļāđāļāļāļđāđāļāđāļāļĩāđāļāļāļĢāđāļŠ Introduction to Web App Development with Node.js & Express āļāļķāđāļāđāļāđāļāļāļāļĢāđāļŠāđāļĢāļĩāļĒāļāļāļĢāļĩāđāļāđāļāļāļāļāļēāļ borntoDev āđāļĨāļĒāļāļĢāļąāļ āđāļĢāļĩāļĒāļāļāļ āļāļģ Project āļŠāđāļ āļŠāļēāļĄāļēāļĢāļāļĢāļąāļāđāļāđāđāļāļĩāļĒāļĢāļāļīāļāļąāļāļĢāļāđāļ§āļĒāļāļ° āļĄāļēāđāļĢāļīāđāļĄāļāđāļ§āļĒāļāļąāđāļāļāļāļāđāļĢāļāđāļāļāļēāļĢāđāļāđ Library āļāļ·āđāļ express-rate-limit āļāļąāļāļāļĢāļąāļ
āļāļģāļāļēāļĢāļāļīāļāļāļąāđāļ express-rate-limit āđāļāļĒāđāļāđāļāļģāļŠāļąāđāļ
npm i express-rate-limit
āļāļģāļāļēāļĢ Import Library express-rate-limit āđāļāđāļēāļĄāļēāđāļāđāļāļēāļ (āđāļāđāļĢāļđāļāđāļāļāļĄāļēāļāļĢāļēāļāļēāļ ES6)
import { rateLimit } from 'express-rate-limit'
āļŠāļĢāđāļēāļāļāļąāļ§āđāļāļĢāļāļ·āđāļ limiter āļŦāļĢāļ·āļ āļāļ·āđāļāļāļ·āđāļāđ āđāļāļ·āđāļāđāļāđāļāļāļąāļ§ Config āļāļāļ rateLimit
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // āļŦāļāđāļ§āļĒāđāļ§āļĨāļēāđāļāđāļ āļĄāļīāļĨāļĨāļīāļ§āļīāļāļēāļāļĩ āđāļāļāļĩāđāļāļ·āļ 15 āļāļēāļāļĩ (1000 āļĄāļīāļĨāļĨāļīāļ§āļīāļāļēāļāļĩ = 1 āļ§āļīāļāļēāļāļĩ)
max: 100, // āļāļģāļāļ§āļāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļŠāļđāļāļŠāļļāļāļāđāļ IP Address āļāđāļāđāļ§āļĨāļēāđāļ windowMS
standardHeaders: true, // āļāļ·āļ rate limit āđāļāļĒāļąāļ `RateLimit-*` āđāļ headers
legacyHeaders: false, // āļāļīāļ `X-RateLimit-*` āđāļ headers
})
āļāļēāļāļāļąāđāļāđāļĢāļĩāļĒāļāđāļāđāļāļąāļ§āđāļāļĢ āļāļĩāđāđāļāđāļāļģāļāļēāļĢāļŠāļĢāđāļēāļāđāļ āđāļāļĒāđāļāđ app.use() āļāļķāđāļāđāļāđāļāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđ Middleware āļāļāļ Express.js (āđāļāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļąāļ§āđāļāļĢāļāļ·āđāļ limiter)
app.use(limiter)
āđāļāļĒāđāļāļĢāļāļŠāļĢāđāļēāļāļāļāļ Code āļāļĩāđāđāļāđāļāļ°āđāļāđāļāļĨāļąāļāļĐāļāļ°āļāļĩāđ
import express from "express";
import { rateLimit } from 'express-rate-limit'
//āļŠāļĢāđāļēāļ express app
const app = express();
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // āļŦāļāđāļ§āļĒāđāļ§āļĨāļēāđāļāđāļ āļĄāļīāļĨāļĨāļīāļ§āļīāļāļēāļāļĩ āđāļāļāļĩāđāļāļ·āļ 15 āļāļēāļāļĩ (1000 āļĄāļīāļĨāļĨāļīāļ§āļīāļāļēāļāļĩ = 1 āļ§āļīāļāļēāļāļĩ)
max: 100, // āļāļģāļāļ§āļāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļŠāļđāļāļŠāļļāļāļāđāļ IP Address āļāđāļāđāļ§āļĨāļēāđāļ windowMS
standardHeaders: true, // āļāļ·āļ rate limit āđāļāļĒāļąāļ `RateLimit-*` āđāļ headers
legacyHeaders: false, // āļāļīāļ `X-RateLimit-*` āđāļ headers
})
//āđāļāđ middleware āļāļģ rate limit
app.use(limiter);
//āļāļđāļĢāļēāļĒāļāļēāļĢāļŠāļīāļāļāđāļēāļāļąāđāļāļŦāļĄāļ
app.get("/product/all", (req, res) => {
//āļŠāđāļāļāđāļāļĄāļđāļĨāļŠāļīāļāļāđāļēāļāļąāđāļāļŦāļĄāļāļāļĨāļąāļāđāļ āđāļāļĢāļđāļāđāļāļāļāļāļ JSON Array
try {
return res.status(200).json(database);
} catch (error) {
return res.status(500).json({message: "Internal server error"});
}
}
);
āļŠāļĢāļļāļ
āļāļēāļĢāļāļģ Rate Limit āļāļ Express.js āđāļāļĒāđāļāđ Library āļāļ·āđāļ express-rate-limit āđāļāđāļ 1 āđāļāļ§āļīāļāļĩāļāļēāļĢāļāļĩāđāļāđāļēāļĒāđāļĨāļ°āđāļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļāļāļđāđāļāļąāļāļāļēāļāļĩāđāđāļĄāđāļāđāļāļāļāļēāļĢāļāļ§āļēāļĄāļĒāļļāđāļāļĒāļēāļāđāļāļāļēāļĢāđāļāđāļ§āļīāļāļĩāļāļēāļĢāļāļ·āđāļ āđ āđāļāļāļēāļĢāļāđāļāļāļāļąāļ DDoS Attack āļŦāļĢāļ·āļ DoS Attack
āļāđāļēāļāļāļīāļ
- DDoS āļāļ·āļāļāļ°āđāļĢ? āļāļģāđāļĄāđāļ§āđāļāđāļāļāđāļāļ·āđāļāļāļąāļāļāļķāļāļĨāđāļĄ? āļŠāļ·āļāļāđāļāđāļĄāļ·āđāļ 1 āđāļĄāļĐāļēāļĒāļ 2567 āļāļēāļ https://nipa.cloud/th/blog/what-ddos-is
- express-rate-limit library documentation āļŠāļ·āļāļāđāļāđāļĄāļ·āđāļ 1 āđāļĄāļĐāļēāļĒāļ 2567 āļāļēāļ https://express-rate-limit.mintlify.app/