2017-07-08 5 views
0

Derzeit mein Java-Code verwendetWie offen Umleitung Problem zu beheben in java

response.sendRedirect(request.getRequestUrl().toString()); 

, die eine offene Umleitung ist.

Ich muss das beheben, aber ich kann es nicht weiß auflisten, da es zu viele URLs zugeordnet sind.

Ich habe die folgende Lösung mit ESAPI versucht, aber es funktioniert nicht für mich.

ESAPI.httpUtilities().setCurrentHTTP(req, resp); 
ESAPI.httpUtilities().sendRedirect(location); 
ESAPI.httpUtilities().clearCurrent(); 

Ich bin neu in ESAPI.

+0

Siehe auch OWASP's [Ungültige Redirects und Vorwärts Cheat Sheet] (https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet) und [Redirects and Forwards] (https://www.owasp.org/index. php/Redirects_and_forwards). Schade, Kevin Wall lauert nicht auf Stack Overflow. Er ist einer der ESAPI Java-Leute. – jww

+0

Wenn Sie sagen, Whitelisting ist ein zu großes Problem, ist Blacklisting noch schlimmer. – avgvstvs

+0

Ich beobachte es (aber nur einmal pro Woche) und ich sah, dass der andere ESAPI Co-Lead (Matt Seil) bereits geantwortet hatte. –

Antwort

0

Vielen Dank für Ihre Anregungen und Kommentare. fand ich, dass die Linien

ESAPI.httpUtilities().setCurrentHTTP(req, resp); 
ESAPI.httpUtilities().sendRedirect(location); 
ESAPI.httpUtilities().clearCurrent(); 

jetzt gut für mich funktioniert, nach einem langen Kampf, den ich, dass mein Code gefunden neueste Version von commons-configuration.jar verwendet, aber wenn ich ESAPI als Abhängigkeit der ESAPI hinzugefügt verwendet eine alte Version des gleichen und das war nicht kompatibel mit meinem Code, so dass ich gerade die Dies von Esapi Abhängigkeit mit dem Ausschluss in Pom ausgeschlossen und es funktionierte für mich.

1

[Disclaimer]

Ich bin Projekt Co-Lead auf ESAPI.

Ich muss das beheben, aber ich kann es nicht auflisten, da es auch viele URLs sind damit verbunden sind.

Im Wesentlichen: "Ich muss das Problem beheben, aber ich beschränke mich von der einfachsten Lösung."

Here are the best practices enumerated by @jww:

  1. einfach vermeiden Umleitungen und Termingeschäfte.

  2. Wenn verwendet, darf die URL nicht als Benutzereingabe für das Ziel verwendet werden. Dies kann normalerweise getan werden. In diesem Fall sollten Sie über eine Methode zum Überprüfen der URL verfügen.

  3. Wenn Benutzereingaben nicht vermieden werden können, stellen Sie sicher, dass der angegebene Wert für die Anwendung gültig und für den Benutzer autorisiert ist.

  4. Es wird empfohlen, dass eine solche Zieleingabe einem Wert und nicht der tatsächlichen URL oder einem Teil der URL zugeordnet wird und dass der serverseitige Code diesen Wert in die Ziel-URL übersetzt.

  5. Eingabe bereinigen durch Erstellen einer Liste vertrauenswürdiger URLs (Hostlisten oder Regex).

  6. Erzwingen Sie alle Weiterleitungen, um zuerst eine Seite zu durchlaufen, die Benutzer darüber informiert, dass sie Ihre Website verlassen, und sie auf einen Link zur Bestätigung klicken zu lassen.

Dies sind buchstäblich alle verfügbaren Lösungen für Sie. Einige Web-Frameworks machen es Ihnen leicht, wie Spring MVC mit Spring Security.

Diese Linien:

ESAPI.httpUtilities().setCurrentHTTP(req, resp); 
ESAPI.httpUtilities().sendRedirect(location); 
ESAPI.httpUtilities().clearCurrent(); 

Sie nicht arbeiten, weil Sie die Benutzereingabe zu überprüfen, bevor die Umleitung durchführen.

1

Sie werden auf jeden Fall wollen, dass dies zumindest auf der Grundlage von Domain-Namen weiß-Liste. Beschränken Sie es so weit wie möglich. Wenn Ihre App beispielsweise unter https://myApp.example.com/ gehostet wird, ist die Weiterleitung an eine beliebige Stelle auf Ihrer Website wahrscheinlich in Ordnung.(Ich schreibe wahrscheinlich, weil, wenn es als eine Möglichkeit verwendet werden kann, Autorisierungsprüfungen zu umgehen, sagen wir auf einer Multisequenz-Seitenserie, dann ist es vielleicht nicht in Ordnung. Aber solange Ihre regelmäßigen Autorisierungsüberprüfungen die Umleitung aufheben und validieren, Sie werden im Allgemeinen in Ordnung sein.) Aber was ist mit Weiterleitungen zu https://anotherApp.example.com/? Würden diese in Ordnung sein? Was ist mit irgendetwas in der Domain "example.com"? Sind ihre anderen 3rd-Party-Domains, die Sie auf die Whitelist setzen müssen? Wenn dies der Fall ist, sollten Sie auch diese URLs auflisten. Aber die eine Sache, die Sie vermeiden möchten, sind vollständig offene Redirects und dafür benötigen Sie eine Art von White-Listing. Sie könnten einige benutzerdefinierte Validatoren mit ESAPI erstellen, aber es ist wahrscheinlich einfacher, es ohne ESAPI zu schreiben. Wenn Sie eine Reihe von URLs haben, die Sie in die Whitelist aufnehmen müssen, bewahren Sie sie in einer Konfigurationsdatei auf, die nicht Teil Ihrer .war/.ear-Datei ist. Sie können sie einfach aktualisieren, ohne Ihre Anwendung erneut zu implementieren und die Konfiguration einfach (neu) zu lesen Datei, wenn es aktualisiert wird.

Hoffe, das hilft.

-kevin

Verwandte Themen