Sicheres Weiterleiten mit der Funktion wp_safe_redirect()

In der Datei /wp-includes/pluggable.php ist die Funktion wp_redirect() zu finden. Diese kann zwei Argumente aufnehmen, die Zieladresse und der optionale HTTP Status Code.

Mit wp_redirect( 'https://dominikschilling.de/wp-admin/' ) könnte somit ganz einfach zu https://dominikschilling.de/wp-admin/ weitergeleitet werden.

Dank zwei existierenden Filtern kann die Zieladresse sowie der Status Code noch nachträglich geändert werden. So können Adressen vor der Weiterleitung überprüft werden, zum Beispiel um nur lokale Weiterleitungen zu erlauben.

Um diese Arbeit zu vereinfachen, stellt WordPress eine weitere Funktion names wp_safe_redirect() bereit.

Wird nun wp_safe_redirect( 'http://example.de/wp-admin/file.php' ) genutzt, wobei die WordPress Installation unter https://dominikschilling.de/wp-admin/file.php erreichbar ist, wird nicht zu der angegeben Adresse geleitet.
Der Grund dafür ist, dass die Zieladresse nicht im Bereich von home_url() (wäre https://dominikschilling.de/) liegt. Dies wird mittels wp_validate_redirect() geprüft.
Die Funktion wp_validate_redirect() bekommt als zweites Argument admin_url() übermittelt. Wird eine fehlerhafte Zieladresse ermittelt, wird in diesem Fall zum Dashboard weitergeleitet.

Wann lohnt sich nun wp_redirect() und wann wp_safe_redirect()?
Die erste Variante ist für eine Weiterleitung geeignet, wenn der Host der Zieladresse bekannt ist bzw. ihm vertraut werden kann.
Muss hingegen auf den Referrer für eine Weiterleitung gesetzt werden, sollte der Einsatz von wp_safe_redirect() bevorzugt werden.

Bildquelle: GirlieMac / flickr.com, Lizenz: CC BY 2.0.

3 thoughts on “Sicheres Weiterleiten mit der Funktion wp_safe_redirect()”

  1. Wichtig ist in diesem Zusammenhang, auch aus SEO-Sicht, dass bei beiden Redirects auch der HTTP-Status übertragen wird, um so dem Crawler mitzuteilen, dass sich die URL geändert hat.

  2. Hmm…so lange es Word press sicherer macht solls mir recht sein. :) Ich habe mit Programmierung nicht viel am Hut. Da ich immer wieder auf Berichte von Blog Betreibern stoße deren Blogs Angriffen von Hackern zum Opfer gefallen sind, würde mich mal interessieren was man da als nicht Programmierer dagegen tun kann? Das einzige mir Bekannte wp Plugin heißt Wp Antivirus. Und damit kann ich nicht wirklich was anfangen. :/

  3. @Tom: Als Anwender kann man gegen Sicherheitslücken wohl kaum etwas unternehmen. Es sei denn, man deaktiviert und löscht das Plugin bzw. Theme welches die Lücke enthält.

    Eine Sicherheitslücke wäre es z.B. den vollständigen Pfad zu der Seite zu der umgeleitet werden soll anzugeben. Steht der Pfad in einem Optionsfeld oder ähnlichen und gelingt es den Angreifer diesen Pfad zu manipulieren, kann er den Anwender überall hin umleiten.
    Beispiel: In einer Option steht für die Umleitung “http://www.mein-blog.tld/wp-admin/pluginseite.php”. Gelingt es den Angreifer diese Option zu manipulieren, kann er den Anwender z.B. auf “http://boese.seite.tld/wp-admin/pluginseite.php” umleiten und dort ein Script installieren das weitere Angriffe vornimmt.
    Würde in dem Optionsfeld hingegen nur “pluginseite.php” stehen und würde man die Umleitung mit wp_safe_redirect( admin_url( $pluginseite ) ); erzeugen, wäre es nicht möglich den Anwender außerhalb der eigenen Domain umzuleiten da WordPress sich um die Erzeugung des korrekten Links kümmert.

Leave a Reply