-
-
Notifications
You must be signed in to change notification settings - Fork 163
ExpressBrute migration
Roman edited this page Apr 8, 2019
·
23 revisions
rate-limiter-flexible
package provides options and API compatible middleware ExpressBruteFlexible
, which makes it easy to migrate from non-maintained and vulnerable to race conditions ExpressBrute
package.
ExpressBruteFlexible
implements the same logic, but with atomic increments. Note, it works slower on high traffic, as atomic increments cost some performance on store level.
const ExpressBruteFlexible = require('rate-limiter-flexible/lib/ExpressBruteFlexible');
const redis = require('redis');
const http = require('http');
const express = require('express');
const redisClient = redis.createClient({
enable_offline_queue: false,
});
const opts = {
freeRetries: 10,
minWait: 1000,
maxWait: 10000,
lifetime: 30,
storeClient: redisClient,
};
const bruteforce = new ExpressBruteFlexible(ExpressBruteFlexible.LIMITER_TYPES.REDIS, opts);
const app = express();
app.post('/auth',
bruteforce.prevent, // error 429 if we hit this route too often
function (req, res, next) {
res.send('Success!');
}
);
ExpressBruteFlexible
constructor requires to set a limiter type one from ExpressBruteFlexible.LIMITER_TYPES.*
.
The second argument is options.
Options are the same except:
-
storeClient
should be added in case of using any limiter type except MEMORY and CLUSTER. -
dbName
may be set if necessary. It depends on limiter type. -
tableName
may be set if all limits data should be stored in one table. -
storeType
should be set to 'knex', if it is used.
Other notes:
-
ExpressBruteFlexible
always works withrefreshTimeoutOnRequest=false
option. - it works only with seconds since
rate-limiter-flexible
duration is in seconds. For example, ifminWait=500
it is1 second
.
Get started
Middlewares and plugins
Migration from other packages
Limiters:
- Redis
- Memory
- DynamoDB
- Prisma
- MongoDB (with sharding support)
- PostgreSQL
- MySQL
- BurstyRateLimiter
- Cluster
- PM2 Cluster
- Memcached
- RateLimiterUnion
- RateLimiterQueue
Wrappers:
- RLWrapperBlackAndWhite Black and White lists
Knowledge base:
- Block Strategy in memory
- Insurance Strategy
- Comparative benchmarks
- Smooth out traffic peaks
-
Usage example
- Minimal protection against password brute-force
- Login endpoint protection
- Websocket connection prevent flooding
- Dynamic block duration
- Different limits for authorized users
- Different limits for different parts of application
- Block Strategy in memory
- Insurance Strategy
- Third-party API, crawler, bot rate limiting