Rate Limiting (Open Source)

DefectDojo includes login-page rate limiting to protect against brute force attacks, powered by Django Ratelimit.

Configuration

Rate limiting is configured via the following settings (see Configuration for how to apply these):

DD_RATE_LIMITER_ENABLED=(bool, True),
DD_RATE_LIMITER_RATE=(str, '5/m'),
DD_RATE_LIMITER_BLOCK=(bool, True),
DD_RATE_LIMITER_ACCOUNT_LOCKOUT=(bool, True),

Rate Limit (DD_RATE_LIMITER_RATE)

Sets how frequently requests will be limited. Supported units:

  • Seconds: 1s
  • Minutes: 5m
  • Hours: 100h
  • Days: 2400d

See the Django Ratelimit rates docs for extended configuration options.

Block Requests (DD_RATE_LIMITER_BLOCK)

By default, rate limiting records offenses but does not block requests. Setting DD_RATE_LIMITER_BLOCK to True will actively block all incoming requests once the configured rate is exceeded.

Account Lockout (DD_RATE_LIMITER_ACCOUNT_LOCKOUT)

When enabled, a user whose login attempts trigger the rate limit will be required to reset their password before they can log in again. This reduces the risk of credential compromise during a brute force attack.

Multi-Process Behaviour

When running with multiple uwsgi processes, the rate limiting package uses a memory-based cache that is local to each process. Rate limit counters are not shared across processes in this default configuration.