Skip to main content

A firewall for your wagtail application. It allows you to filter requests based on IP, User-Agent, URL and Country.

Project description

request_filters

Chart Admin

A sort of software firewall for your django application which provides advances capabilities for blocking or logging requests at runtime. Only for use in wagtail projects - might support django-only in the future.

Supports filtering based on:

  • IP
  • USER_AGENT
  • PATH
  • QUERY_STRING
  • REFERER
  • COUNTRY
  • METHOD
  • HEADER

Matching based on:

  • Absolute (== in most cases. Differs for: IP (Checks subnet if cidr provided), COUNTRY (Checks country code or name as returned by GeoIP2))
  • Glob (fnmatch)
  • Regex (re)
  • In (IP based on cidr, splits most filter_value's' by comma and checks if the request's value is in the list)

Admin Views

Has a a view to easy analyse the behaviour of filters overall in a chart.

Quick start


  1. Add 'request_filters' to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
    ...,
    'request_filters',
    ]
    
  2. Add request_filters.middleware.RequestFilterMiddleware to your MIDDLEWARE as the FIRST ENTRY.

    MIDDLEWARE = [
    	'request_filters.middleware.RequestFilterMiddleware',
    	...,
    ]
    
  3. See the options section for more information on how to configure the app.

  4. Log into your wagtail admin and configure your filters.

Options

GeoIP2

You must appropriately configure django geoip2.

More information on how this can be done is found here.

EXCLUDED_APPS

List of excluded apps, all requests to these apps will be allowed (If resolver_match is available). Exclusions should preferably happen via IP ranges or absolute IPs.

    REQUEST_FILTERS_EXCLUDED_APPS:                list[str] = [
        "admin",
    ]

EXCLUDED_PATHS

Excluded paths, all requests to these paths will skip filtering

Paths should be in the format of a glob pattern. Exclusions should preferably happen via IP ranges or absolute IPs.

    REQUEST_FILTERS_EXCLUDED_PATHS:               list[str] = [
        "/admin/*",
        f"{getattr(settings, 'STATIC_URL', '/static/')}*",
        f"{getattr(settings, 'MEDIA_URL', '/media/')}*",
    ]

EXCLUDED_IPS

Excluded IP addresses, all requests from these IPs will be allowed.

    # This is the safest way to exclude requests from being filtered.
    REQUEST_FILTERS_EXCLUDED_IPS:                 list[str] = [
        "127.0.0.0/8", "::1/128",
    ]

Caching

Caching settings and their defaults.

# Default cache backend to use for storing settings and filters
REQUEST_FILTERS_CACHE_BACKEND:                str                   = "default"

# Namespaces for cache keys.
REQUEST_FILTERS_SETTINGS_CACHE_KEY:           str                   = "request_filters_settings"
REQUEST_FILTERS_FILTERS_CACHE_KEY:            str                   = "request_filters_filters"

# Timeout the cache for the filter settings for 5 minutes by default
REQUEST_FILTERS_SETTINGS_CACHE_TIMEOUT:       timezone.timedelta    = timezone.timedelta(minutes=5)

# Timeout the cache for the filters for 1 hour by default
REQUEST_FILTERS_FILTERS_CACHE_TIMEOUT:        timezone.timedelta    = timezone.timedelta(hours=1)

# Clear cache when settings are saved
REQUEST_FILTERS_CLEAR_CACHE_ON_SAVE_SETTINGS: bool                  = True

# Clear cache when filters are saved
REQUEST_FILTERS_CLEAR_CACHE_ON_SAVE_FILTERS:  bool                  = True

Exception Message

Message shown when a filter raises an exception, or blocks the request.

REQUEST_FILTERS_BLOCK_MESSAGE:                str                   = _("You are not allowed to access this resource")

Filter Headers

Add headers to the response which displays minimal information about the filters.

REQUEST_FILTERS_ADD_FILTER_HEADERS:           bool                  = True  # Add headers to the response which displays minimal information about the filters.

Create a log entry for requests which have passed all filters.

Not recommended for production.

REQUEST_FILTERS_LOG_HAPPY_PATH:               bool                  = False # Log requests that are allowed by the filters

Default values for the check and action functions.

REQUEST_FILTERS_DEFAULT_CHECK_VALUE:          Union[bool, callable] = True  # Allow checks to pass by default
REQUEST_FILTERS_DEFAULT_ACTION_VALUE:         callable              = lambda self, filter, settings, request, get_response: HttpResponseForbidden(
        _("You are not allowed to access this resource")
)

Registering menu items

REQUEST_FILTERS_REGISTER_TO_MENU:             str                   = "register_settings_menu_item" # Register to a menu hook.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

request_filters-1.4.9.tar.gz (109.7 kB view details)

Uploaded Source

File details

Details for the file request_filters-1.4.9.tar.gz.

File metadata

  • Download URL: request_filters-1.4.9.tar.gz
  • Upload date:
  • Size: 109.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for request_filters-1.4.9.tar.gz
Algorithm Hash digest
SHA256 983cc832ac20fac2478a237abdb26ad9cc27ffa7d7122cdf58ee35afd8bc6b3b
MD5 09b2df9ea5e300188513cb624638dd90
BLAKE2b-256 21fa4a854add2e72fdfa5d25edd5d1b9c5f61a8cb22c454591572feea158c1b0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page