Jan. 19, 2015

Django X-Forwarded-For Middleware

Wenn man Django hinter einem reverse Proxy betreibt steht im REMOTE_ADDR Header-Feld immer die IP des Reverse-Proxy, während im X-Forwarded-For Feld die IP des Clients steht. Da in dem Fall das Header-Feld vom Reverse-Proxy gesetzt wurde (und nicht vom Client manipuliert werden kann) ist es auch eine vertrauenswürdige Quelle für die externe IP.

Die einfachste Lösung um in Django-Apps die X-Forwarded-For IP zu verwenden, ohne die Apps selber anpassen zu müssen, ist über eine Middleware. Die offizielle Middleware für diesen Zweck wurde allerdings in Django 1.1 entfernt mit dem Hinweis, dass man eine eigene verwenden soll.

Damit man nicht in jedem Projekt eine eigene Middleware haben muss habe ich ich Python-Package gebaut:

django-xforwardedfor-middleware (Source)

Installation:

pip install django-xforwardedfor-middleware

Einbinden in settings.py:

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware',
    [...]
    'x_forwarded_for.middleware.XForwardedForMiddleware',
)

Achtung: die Middleware ersetzt die externe IP immer wenn X-Forwarded-For gesetzt ist, unabhängig davon ob die externe IP die des Proxies ist oder eine andere, was bei Verbindungen ohne Reverse-Proxy ein Sicherheitsrisiko darstellt.

Kategorien Kurz bemerkt Software
Tagged
Mobil qrcode zeigen

0 Kommentare

Kommentare

Kommentar schreiben