express-rate-limit vs rate-limiter-flexible vs express-slow-down vs express-brute vs express-limiter
Node.jsのリクエスト制限ライブラリ
express-rate-limitrate-limiter-flexibleexpress-slow-downexpress-bruteexpress-limiter類似パッケージ:
Node.jsのリクエスト制限ライブラリ

リクエスト制限ライブラリは、特定の条件下でのリクエストの数を制限するために使用されるツールです。これにより、サーバーへの過剰な負荷を防ぎ、サービスの可用性を向上させることができます。これらのライブラリは、悪意のある攻撃やスパムからアプリケーションを保護し、ユーザー体験を向上させるために重要です。

npmのダウンロードトレンド
3 年
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
express-rate-limit9,597,1893,194141 kB81ヶ月前MIT
rate-limiter-flexible1,307,1863,437191 kB164日前ISC
express-slow-down58,40629238.2 kB01ヶ月前MIT
express-brute13,153568-219年前BSD
express-limiter12,156423-218年前MIT
機能比較: express-rate-limit vs rate-limiter-flexible vs express-slow-down vs express-brute vs express-limiter

機能の柔軟性

  • express-rate-limit:

    Express-rate-limitは、さまざまなオプションを提供し、特定の条件に基づいてリクエストを制限できます。特に、リクエストのカウントやウィンドウ期間を簡単に設定できます。

  • rate-limiter-flexible:

    Rate-limiter-flexibleは、複数のストレージバックエンドをサポートし、複雑な制限ロジックを実装できます。これにより、さまざまなシナリオに対応可能です。

  • express-slow-down:

    Express-slow-downは、リクエストの速度を調整することで、攻撃を緩和する機能を持っています。特に、リクエストの遅延を設定することで、攻撃者の行動を抑制します。

  • express-brute:

    Express-bruteは、セッションやIPアドレスに基づく制限をサポートし、カスタマイズ可能なストレージオプションを提供します。これにより、特定のニーズに合わせたリクエスト制限が可能です。

  • express-limiter:

    Express-limiterは、基本的なリクエスト制限機能を提供し、シンプルな設定で迅速に導入できます。

パフォーマンス

  • express-rate-limit:

    Express-rate-limitは、効率的なリクエスト制限を提供し、パフォーマンスを維持しながら多くのリクエストを処理できます。

  • rate-limiter-flexible:

    Rate-limiter-flexibleは、ストレージバックエンドの選択によってパフォーマンスが変わりますが、非常に高い柔軟性を持ち、複雑な制限を実装できます。

  • express-slow-down:

    Express-slow-downは、リクエストの遅延を導入するため、攻撃を緩和する際にパフォーマンスに影響を与える可能性がありますが、効果的な防御手段です。

  • express-brute:

    Express-bruteは、リクエスト制限の実装が簡単で、パフォーマンスに優れていますが、ストレージの選択によってはパフォーマンスが影響を受ける可能性があります。

  • express-limiter:

    Express-limiterは、シンプルな実装のため、パフォーマンスに優れていますが、機能が限られているため、複雑な要件には向いていません。

学習曲線

  • express-rate-limit:

    Express-rate-limitは、豊富なドキュメントがあり、学習しやすいですが、オプションが多いため、深く理解するには時間がかかることがあります。

  • rate-limiter-flexible:

    Rate-limiter-flexibleは、柔軟性が高いため、学習曲線が急ですが、強力な機能を提供します。

  • express-slow-down:

    Express-slow-downは、特定のシナリオに特化しているため、学習曲線はやや急ですが、効果的な防御手段として理解する価値があります。

  • express-brute:

    Express-bruteは、設定が比較的簡単で、学習曲線が緩やかです。基本的な使い方をすぐに理解できます。

  • express-limiter:

    Express-limiterは、シンプルな設計のため、初心者でも簡単に学ぶことができます。

使用シナリオ

  • express-rate-limit:

    Express-rate-limitは、APIのリクエスト制限に最適で、特に高トラフィックなアプリケーションでの使用が推奨されます。

  • rate-limiter-flexible:

    Rate-limiter-flexibleは、複雑なリクエスト制限が必要な場合や、さまざまなストレージオプションを利用したい場合に最適です。

  • express-slow-down:

    Express-slow-downは、DDoS攻撃やブルートフォース攻撃に対する防御に特に効果的です。

  • express-brute:

    Express-bruteは、ユーザーごとのリクエスト制限が必要なシナリオに最適です。特に、ログイン試行の制限などに利用されます。

  • express-limiter:

    Express-limiterは、基本的なリクエスト制限が必要なシンプルなアプリケーションに適しています。

選び方: express-rate-limit vs rate-limiter-flexible vs express-slow-down vs express-brute vs express-limiter
  • express-rate-limit:

    Express-rate-limitは、非常に人気があり、使いやすいリクエスト制限ライブラリです。ミドルウェアとして簡単に統合でき、さまざまなオプションを提供しており、特にAPIの保護に適しています。

  • rate-limiter-flexible:

    Rate-limiter-flexibleは、非常に柔軟で強力なリクエスト制限ライブラリです。RedisやMongoDBなどのストレージバックエンドをサポートし、複雑な制限ロジックを必要とする場合に最適です。

  • express-slow-down:

    Express-slow-downは、リクエストの速度を遅くすることで攻撃を緩和するためのライブラリです。特に、DDoS攻撃やブルートフォース攻撃に対して効果的です。

  • express-brute:

    Express-bruteは、特にユーザーごとのリクエスト制限を簡単に設定したい場合に適しています。セッションやIPアドレスに基づいて制限を行うことができ、柔軟なストレージオプションを提供します。

  • express-limiter:

    Express-limiterは、シンプルで軽量なリクエスト制限を提供します。基本的な制限機能を必要とする場合に最適で、設定が簡単です。

express-rate-limit のREADME

express-rate-limit

tests npm version npm downloads license

Basic rate-limiting middleware for Express. Use to limit repeated requests to public APIs and/or endpoints such as password reset. Plays nice with express-slow-down and ratelimit-header-parser.

Usage

The full documentation is available on-line.

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

const limiter = rateLimit({
	windowMs: 15 * 60 * 1000, // 15 minutes
	limit: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes).
	standardHeaders: 'draft-8', // draft-6: `RateLimit-*` headers; draft-7 & draft-8: combined `RateLimit` header
	legacyHeaders: false, // Disable the `X-RateLimit-*` headers.
	ipv6Subnet: 56, // Set to 60 or 64 to be less aggressive, or 52 or 48 to be more aggressive
	// store: ... , // Redis, Memcached, etc. See below.
})

// Apply the rate limiting middleware to all requests.
app.use(limiter)

Data Stores

The rate limiter comes with a built-in memory store, and supports a variety of external data stores.

Configuration

All function options may be async. Click the name for additional info and default values.

OptionTypeRemarks
windowMsnumberHow long to remember requests for, in milliseconds.
limitnumber | functionHow many requests to allow.
messagestring | json | functionResponse to return after limit is reached.
statusCodenumberHTTP status code after limit is reached (default is 429).
handlerfunctionFunction to run after limit is reached (overrides message and statusCode settings, if set).
legacyHeadersbooleanEnable the X-Rate-Limit header.
standardHeaders'draft-6' | 'draft-7' | 'draft-8'Enable the Ratelimit header.
identifierstring | functionName associated with the quota policy enforced by this rate limiter.
storeStoreUse a custom store to share hit counts across multiple nodes.
passOnStoreErrorbooleanAllow (true) or block (false, default) traffic if the store becomes unavailable.
keyGeneratorfunctionIdentify users (defaults to IP address).
ipv6Subnetnumber (32-64) | function | falseHow many bits of IPv6 addresses to use in default keyGenerator
requestPropertyNamestringAdd rate limit info to the req object.
skipfunctionReturn true to bypass the limiter for the given request.
skipSuccessfulRequestsbooleanUncount 1xx/2xx/3xx responses.
skipFailedRequestsbooleanUncount 4xx/5xx responses.
requestWasSuccessfulfunctionUsed by skipSuccessfulRequests and skipFailedRequests.
validateboolean | objectEnable or disable built-in validation checks.

Thank You

Sponsored by Zuplo a fully-managed API Gateway for developers. Add dynamic rate-limiting, authentication and more to any API in minutes. Learn more at zuplo.com

zuplo-logo


Thanks to Mintlify for hosting the documentation at express-rate-limit.mintlify.app

Create your docs today


Finally, thank you to everyone who's contributed to this project in any way! 🫶

Issues and Contributing

If you encounter a bug or want to see something added/changed, please go ahead and open an issue! If you need help with something, feel free to start a discussion!

If you wish to contribute to the library, thanks! First, please read the contributing guide. Then you can pick up any issue and fix/implement it!

License

MIT © Nathan Friedly, Vedant K