Express Brute is a powerful tool designed to help Node.js applications prevent brute force attacks. It works as middleware in the Express framework to limit repeated requests to endpoints, such as failed login attempts.
Getting Started
First, you need to install the express-brute module:
npm install express-brute
Then, you can set it up in your Node.js application:
const ExpressBrute = require('express-brute');
const store = new ExpressBrute.MemoryStore();
const bruteforce = new ExpressBrute(store);
const app = express();
// Applying brute force protection to all routes
app.use(bruteforce.prevent);
Useful API Examples
Setting Up Redis Store
const RedisStore = require('express-brute-redis');
const redisStore = new RedisStore({
host: '127.0.0.1',
port: 6379
});
const bruteforce = new ExpressBrute(redisStore);
Customizing Fail Callback
const bruteforce = new ExpressBrute(store, {
failCallback: (req, res, next, nextValidRequestDate) => {
res.status(429).json({ error:'Too many requests - please try again later.' });
}
});
Customizing Retry Count and Timeout
const bruteforce = new ExpressBrute(store, {
freeRetries: 5,
minWait: 5*60*1000, // 5 minutes
maxWait: 60*60*1000, // 1 hour
});
Protecting Specific Routes
app.post('/login', bruteforce.prevent, (req, res) => {
// Handle login
});
Example Application
const express = require('express');
const ExpressBrute = require('express-brute');
const app = express();
const store = new ExpressBrute.MemoryStore();
const bruteforce = new ExpressBrute(store, {
freeRetries: 3,
minWait: 5*60*1000,
maxWait: 15*60*1000,
failCallback: (req, res, next, nextValidRequestDate) => {
res.status(429).json({ error:'Too many login attempts - please try again later.' });
}
});
app.post('/login', bruteforce.prevent, (req, res) => {
// Assume login logic here
res.json({ success: 'Logged in!' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
With express-brute, you can effectively mitigate brute force attacks, enhancing the security of your application.
Hash: a8751e07e668d3bbb52927b4e494affe8a0a867db4dc6353ed2376d4104c2e3e