[PYTHON] Maßnahmen, die zu ergreifen sind, wenn in HttpResponse Redirect ein verdächtiger Vorgang auftritt

Wenn Sie versuchen, mit HttpResponseRedirect zu etwas anderem als http [s] oder ftp umzuleiten, tritt eine SuspiciousOperation-Ausnahme auf, wie unten gezeigt.

SuspiciousOperation: Unsafe redirect to URL with protocol 'com.example.app.sample0'

Sie können diese Ausnahme umgehen, indem Sie folgenden Code hinzufügen: Fügen Sie allow_schemes ein Umleitungsziel hinzu, für das Sie keine Ausnahme auslösen möchten.

try:
    from django.http.response import HttpResponseRedirectBase
        HttpResponseRedirectBase.allowed_schemes += ['com.example.app.sample0', ]
except ImportError:
    pass

In Bezug auf den Import wurden in der alten Version django.http und darunter nicht in Antwort und Anforderung unterteilt. Wenn die Version von Django alt ist (etwa 1.4 oder früher, ich habe die detaillierte Version vergessen), ist der Import der folgende Code.

from django.http import HttpResponseRedirectBase

Wenn es sich innerhalb des Bereichs von Webseiten befindet, die normalerweise mit einem Browser angezeigt werden, ist es unwahrscheinlich, dass Sie zu einem anderen Umleitungsziel als http [s] und ftp springen möchten. Wenn Sie beispielsweise auf eine Smartphone-App abzielen, möchten Sie zu '[Name des App-Pakets]: //' umleiten (Beispiel: Wenn Sie mit OAuth die Kontrolle von der Authentifizierungs-URL an die App zurückgeben) und so weiter.


Ergänzung

Diese Ausnahme bei der Umleitung wurde in der Django 1.4-Serie eingeführt.

Der tatsächliche Code von HttpResponseRedirectBase lautet wie folgt, und es ist leicht zu erkennen, dass das Umleitungsziel zu allow_schemes hinzugefügt werden sollte. Da der Code als Sicherheitsmaßnahme eingeführt wurde, ist es besser, das Umleitungsziel so weit wie möglich zu begrenzen, wie im obigen Beispiel.

response.py


class HttpResponseRedirectBase(HttpResponse):
    allowed_schemes = ['http', 'https', 'ftp']

    def __init__(self, redirect_to, *args, **kwargs):
        parsed = urlparse(redirect_to)
        if parsed.scheme and parsed.scheme not in self.allowed_schemes:
            raise SuspiciousOperation("Unsafe redirect to URL with protocol '%s'" % parsed.scheme)
        super(HttpResponseRedirectBase, self).__init__(*args, **kwargs)
        self['Location'] = iri_to_uri(redirect_to)

    url = property(lambda self: self['Location'])

Recommended Posts

Maßnahmen, die zu ergreifen sind, wenn in HttpResponse Redirect ein verdächtiger Vorgang auftritt
Maßnahmen, die zu ergreifen sind, wenn in X11 Forward "Anzeige kann nicht geöffnet werden" angezeigt wird
Maßnahmen, die bei verstümmelten Zeichen zu ergreifen sind, wenn versucht wird, das Ergebnis von aws-cli umzuleiten / weiterzuleiten
Was tun, wenn in numpy.load () "Objekt-Arrays nicht geladen werden können, wenn allow_pickle = False" auftritt?
Aufzeichnung der Aktionen, die ausgeführt werden müssen, wenn google_image_download nicht verwendet werden kann
Erfassen Sie das Betriebsprotokoll automatisch im Terminal, wenn Sie sich bei Linux anmelden
[Hinweis] Zu überprüfende Punkte, wenn in pyenv eine Endlosschleife auftritt
Was tun, wenn UnicodeDecodeError während read_csv in Pandas auftritt (pd.read_table ())
Was tun, wenn ModuleNotFoundError: In Python tritt kein Modul mit dem Namen 'XXX' auf
[OSX] [pyenv] Was tun, wenn in pip ein SSL-Fehler auftritt?