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] JWT 인증 (0) | 2021.03.09 |
[node.js] mariaDB CRUD (시퀄라이즈) (0) | 2021.03.08 |
[node.js] Express (0) | 2021.03.05 |