express-rate-limit - Express.js

  • 作成日:
  • 最終更新日:2025/10/11

express-rate-limit とは?

同一IPからのリクエスト回数を制限でき、制限回数を超えると、そのIPからのアクセスを一定時間ブロックできます。

ログインフォームなどへの連続アクセスを遅らせて、総当たり攻撃(ブルートフォース)をしづらくできます。

インストールするには、以下のコマンドを実行します。

npm install express-rate-limit

ルーターで制限をかける設定

ルーターで制限をかけるには、ルーターに以下のように設定します。

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

const loginLimiter = rateLimit({
  windowMs: 60 * 1000,
  max: 5,
  handler: (req, res, next, options) => {
res.redirect('/too_many_requests');
  }
});

router.post('/login', loginLimiter, (req, res) => {
  // 処理
});

ミドルウェア内で条件分岐して除外する

const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
  windowMs: 60 * 1000,
  max: 5,
  handler: (req, res, next, options) => {
res.redirect('/too_many_requests');
  }
});

app.use((req, res, next) => {
  const skipPaths = ['/too_many_requests'];
  if (skipPaths.includes(req.path)) {
return next(); // 除外して次へ
  }
  return limiter(req, res, next); // それ以外は制限を適用
});

送信テスト

Powershell で以下のコマンドを実行することで get メソッドで送信するには、以下のようにします。

for ($i = 1; $i -le 10; $i++) {
curl http://localhost:3000
Write-Host ""
}

Powershell で POST メソッドで送信するには以下のようにします。

for ($i = 1; $i -le 10; $i++) {
Invoke-WebRequest -Uri http://localhost:3000/auth/login -Method POST
}