클리엘
CLIEL LAB
클리엘
전체 방문자
117,050
오늘
281
어제
116
  • 분류 전체보기 (396)
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (187)
      • C# (24)
      • ASP.NET Core (31)
      • Windows API for .NET (128)
    • Server (50)
      • SQL Server (8)
      • MariaDB (18)
      • Windows Server (5)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

  • [C#] Thread(스레드)와 Task(태⋯
    2021.10.24
    [C#] Thread(스레드)와 Task(태⋯
  • [C#] TCP/IP 통신
    2021.10.28
    [C#] TCP/IP 통신
  • [ASP.NET Core] IIS 배포 (게시)
    2021.12.15
    [ASP.NET Core] IIS 배포 (게시)
  • [MSSQL] MS SQL Server 다운로⋯
    2022.02.23
    [MSSQL] MS SQL Server 다운로⋯
  • [C#] 인터페이스와 추상클래스
    2021.10.07
    [C#] 인터페이스와 추상클래스

태그

  • Windows API
  • apache nifi
  • JavaScript
  • CentOS
  • CSS3
  • 변수
  • asp.net core web api
  • c#
  • asp.net core
  • HTML5
  • TypeScript
  • node.js
  • jQuery
  • Kotlin
  • Cookie
  • android studio
  • android
  • NestJS
  • MariaDB
  • class

최근 댓글

  • 흠... CACLS는 더이상 사용하지⋯
    클리엘
  • 안녕하세요! 아래 명령 하고부⋯
    방문자
  • 죄송합니다. 관련글을 작성한지⋯
    클리엘
  • 네 맞습니다. 본문에서는 표기⋯
    클리엘
  • 6000 ms 는 6초아닌가요?
    react

최근 글

  • [TypeScript] Visual Studio에⋯
    2022.05.06
    [TypeScript] Visual Studio에⋯
  • [C#] 함수(메서드)의 실행과 디⋯
    2022.05.06
    [C#] 함수(메서드)의 실행과 디⋯
  • [C#] 흐름제어, 형변환, 예외처리
    2022.04.27
    [C#] 흐름제어, 형변환, 예외처리
  • [C#] C# 개요
    2022.04.20
    [C#] C# 개요
  • C#과 .NET6 시작하기
    2022.04.13
    C#과 .NET6 시작하기

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

[node.js] express-rate-limit(DOS공격 방어하기)
Server/node.js

[node.js] express-rate-limit(DOS공격 방어하기)

2021. 3. 9. 10:59
728x90

express-rate-limit를 사용해 허용 가능한 접근 횟수 및 간격을 설정함으로써 지속적인 DOS공격을 차단할 수 있습니다.

 

express-rate-limit는 아래와 같이 설치합니다.

npm i express-rate-limit

설치를 완료하고 나면 아래 내용으로 미들웨어를 추가합니다. 해당 미들웨어는 방어가 필요한 라우트에 부착하여 사용하기 위한 것입니다.

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

exports.limiter = new limit({
	windowMs: 60000,
	max: 5,
	delayMs: 1000,
	handler(req, res) {
		res.status(this.statusCode).json({
			code: this.statusCode,
			message: '1분에 5번 1초씩 요청가능'
		});
	}
});

windowMS는 기준시간으로 예제에서는 1분(밀리초단위)을 설정하였습니다. max는 허용가능한 횟수를, delayMS는 호출 간격을 의미합니다. 따라서 위 설정은 1분 동안에 5번의 접속을 1초씩만 허용한다는 의미입니다.

 

만약 위와 같은 설정을 벗어나는 요청이 있다면 handler로 지정한 함수를 호출해 사용자에게 별도의 경고를 내보낼 수 있습니다.

 

위에서 만들어진 미들웨어를 필요한 라우트에 연결해 줍니다.

const { limiter } = require('./limit');

router.get('/test', limiter, (req, res) => {
	res.send("aaa");
});

1분안에 5번 이상이나 1초미만으로 요청이 이루어지면 위와 같은 결과를 보게 됩니다.

728x90
저작자표시비영리변경금지

'Server > node.js' 카테고리의 다른 글

[node.js] socket.io  (0) 2021.03.09
[node.js] WebSocket  (0) 2021.03.09
[node.js] express-rate-limit(DOS공격 방어하기)  (2) 2021.03.09
[node.js] JWT 인증  (0) 2021.03.09
[node.js] mariaDB CRUD (시퀄라이즈)  (0) 2021.03.08
[node.js] Express  (0) 2021.03.05
    'Server/node.js' 카테고리의 다른 글
    • [node.js] socket.io
    • [node.js] WebSocket
    • [node.js] JWT 인증
    • [node.js] mariaDB CRUD (시퀄라이즈)
    DoS공격, node.js
    클리엘
    클리엘
    누구냐 넌?
    댓글쓰기
    1. react
      2022.04.27 14:45
      6000 ms 는 6초아닌가요?
      수정/삭제댓글쓰기댓글보기
      1. 클리엘
        2022.04.28 09:34 신고
        네 맞습니다. 본문에서는 표기가 잘못됐네요. 수정하였습니다.
        수정/삭제
    다음 글
    [node.js] WebSocket
    이전 글
    [node.js] JWT 인증
    • 이전
    • 1
    • ···
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • ···
    • 396
    • 다음

    티스토리툴바