Node js DDOS 방어

cth.release·2023년 10월 12일

Node.js DDos 방어..?

https://www.npmjs.com/package/express-rate-limit

그냥.. 웹 서핑하다가 찾은 엄청나 보이는 package..

간단하게 설치는

# Using npm
> npm install express-rate-limit
# Using yarn or pnpm
> yarn/pnpm add express-rate-limit

이런식으로 간단하게 하시면 될 듯.

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, 
  max: n // n회 제한
});

app.use(limiter);

매우 간단하게 사용도 가능해서 찾아보길 바란다.

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

const limiter = rateLimit({
	windowMs: 15 * 60 * 1000, // 15분
	limit: 100, // 각 IP 주소당 `window` (여기서는 15분)마다 최대 100번의 요청 허용
	standardHeaders: 'draft-7', // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
legacyHeaders: false, // `X-RateLimit-*` 헤더 비활성화
	// store: ... , // 정확한 속도 제한을 위해 외부 저장소 사용
})

// 모든 요청에 대한 속도 제한 미들웨어 적용
app.use(limiter)

이런식으로 미들웨어 대한 적용을 할 수 있다.

제일 밑에 있는app.use(limiter) 이 부분을

app.use('/api', apiLimiter)

로 수정한다면 /api로 시작하는 요청들을 모두 적용 시킨다.

const createAccountLimiter = rateLimit({
	windowMs: 60 * 60 * 1000, // 1 hour
	limit: 5, // Limit each IP to 5 create account requests per `window` (here, per hour)
	message:
		'Too many accounts created from this IP, please try again after an hour',
	standardHeaders: 'draft-7', // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
	legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})

app.post('/create-account', createAccountLimiter, (req, res) => {
	//...
})

이런식으로도 가능 위 코드는 /create-account으로 오는 요청만 설정한 듯 보이네요.

더 자세한 내용은
위에 써드린
https://www.npmjs.com/package/express-rate-limit <= 에서 볼 수 있습니다!

이번 포스트는 여기까지 쓰겠습니다.

감사합니다.

cth.release 깃헙
cth.release 포트폴리오

cth.release

profile
그냥 뭐.... 개발자에요

0개의 댓글