Ungeprüfte Um- und Weiterleitungen
als Präsentation ▻Die OWASP beschreibt dieses Problem allgemein so:
▻Anwendungen nutzen regelmäßig Weiter- oder Umleitungen, um Browser auf andere Seiten umzulenken. Manchmal verwendet die angegriffene Seite ungeprüfte Parameter für Umleitungen, so dass eine AngreiferIn die Zielseite selbst festlegen kann.
Konkret beschreibt sie zwei Angriffs-Szenarien (hier auf PHP umformuliert)
Szenario 1:
Die Anwendung enthält eine Seite namens redirect.php
, die einen einzigen Parameter url
verwendet.
Ein Angreifer setzt eine URL als Parameterwert ein, die BenutzerInnen auf eine Website führt,
die Schadcode installiert oder Phishing ermöglicht.
http://www.example.com/redirect.php?url=evil.com
Szenario 2:
Die Anwendung verwendet interne Umleitungen, um Anfragen auf unterschiedliche Bereiche der Website weiterzureichen. Um dies zu erleichtern, können Parameter verwendet werden, um festzulegen, auf welchen Bereich im Erfolgsfall umgeleitet wird. In diesem Fall schleust eine Angreiferin eine URL als Parameter ein, die die Zugangskontrollen der Anwendung umgeht und den Browser der Angreiferin auf einen administrativen Bereich leitet, auf den sie normalerweise keinen Zugriff hätte.
http://www.example.com/boring.php?fwd=admin.jsp
▻Weiterleitung in PHP
Wie in Kapitel PHP erzeugt nicht nur HTML gezeigt,
werden Weiterleitungen in PHP mit der Funktion header
implmenentiert:
Php Code Weiterleitung in PHP
<?php // hier passieren wichtige Dinge ... header("Location: status.php"); exit; /* fertig, nichts weiter ausgeben! */ ?>
Auf keinen Fall sollte ein Parameter direkt in der Konstruktion der URL verwendet werden:
Php Code Ungeprüfte Weiterleitung in PHP - so nicht programmieren!
<?php // hier passieren wichtige Dinge ... header("Location: " + $_GET['url'] ); // so nicht programmieren! ?>
Die sicherste Variante ist die verwendung einer Whitelist. Hier wird sicher gestellt dass nur and die vorgegebenen URLs weitergeleitet wird:
Php Code Weiterleitung in PHP - mit Whitelist
<?php // whitelist der erlaubten urls $urls = array( "enzyklopaedie" => "http://de.wikipedia.org", "landkarte" => "http://openstreetmap.org", "uni" => "http://ocw.mit.edu/", "wissenschaft" => "http://www.plosone.org/" ); if ( array_key_exists( $_GET['url'], $urls ) ) { header("Location: " . $urls[ $_GET['url'] ] ); } else { header("Location: ich-lass-mich-nicht-hacken.php"); } ?>
Mehr
Informationen von Google über Open Redirects.
Kapitel
- Das Web Und Html
- Css
- Css Layout
- Urls
- Formulare
- Javascript Dom
- Jquery
- Kommandozeile
- Git
- Http
- Php Vorbereitung
- Php
- Php Db Lesen
- Session
- Php Db Schreiben
- Php Db Optimierung
- Grafik
- Javascript
- Applied Jquery And Css
- Json
- Xml
- Security
- Injection
- Authentifizierung und Session-Management
- Cross Site Scripting (XSS)
- Unsichere direkte Objektreferenzen
- Sicherheitsrelevante Fehlkonfiguration
- Verlust der Vertraulichkeit sensibler Daten
- Fehlerhafte Autorisierung auf Anwendungsebene
- Cross-Site Request Forgery (CSRF)
- Nutzung von Komponenten mit bekannten Schwachstellen
- Ungeprüfte Um- und Weiterleitungen
- Wordpress
- Apache
- Advanced Javascript
- Qualitaet