1. Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PHP: Redirect kommt mit '&' nicht klar!

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Elrontur, 29. Juni 2013.

  1. Elrontur
    Offline

    Elrontur Ehem. Teammitglied

    Registriert seit:
    5. April 2013
    Beiträge:
    138
    Minecraft:
    Elrontur
    Hi minecraft-server.eu-Community,

    ich wende mich mal an euch mit einer Bitte.
    Ich will, dass mein PHP-Redirect funktioniert - und zwar komplett... :D

    So sieht erstmal der Code aus:
    PHP:
    1. <?php
    2.   if(isset($_GET['r'])) {
    3.     $redirect = htmlentities($_GET['r']);
    4.    
    5.     echo "<h1>Weiterleitung</h1>
    6.          Du verlässt <b>&raquo;Rontu&laquo;</b> gleich, um eine externe Website zu besuchen!
    7.          Ich, Elrontur, übernehme keine Verantwortung für die externe Seite oder dessen Inhalte. <br>
    8.          Bist du nicht einverstanden damit, kannst du diese Seite verlassen und dich wieder meiner Seite widmen.
    9.          Wenn du damit einverstanden bist, dann klicke auf den Link:
    10.          <ul>
    11.            <li> <a href=\"$redirect\">$redirect</a>
    12.          </ul>
    13.          <b>ZURZEIT IST DER <i>REDIRECT</i> BEI LINKS MIT '&' DEFEKT! DIES TUT MIR LEID...</b>";    
    14.   } else {
    15.     echo "<h1>Es wurde kein Weiterleitungs-Ziel gefunden!</h1>
    16.          Probiere den Link nocheinmal aus.
    17.          Falls dies nicht helfen sollte, gib die URL direkt im Browser ein!
    18.          (Oben in der Browseradresse zu finden)";  
    19.   }
    20. ?>
    Das wird dann z.B. da eingesetzt:
    HTML:
    1. <a href="index.php?p=1&r=http://www.mozilla.org/de/firefox/fx/" target="_blank">Mozilla Firefox</a>
    Gefixt werden müsste, dass der Code mit den '&'-Zeichen klarkommt und den Inhalt nach den '&' dementsprechend "anzeigt"...

    Alternativ könnte es eine alternative Methode geben, bei der PHP alle Links mit 'index.php?p=1&r=' und der folgenden Adresse abfängt.
    Dann wird der Link nach dem 'index.php?p=0&r=' mit urlencode(); umgewandelt.
    Das wird der Redirect-Page weitergegeben und einfach dort mit urldecode(); wieder in den Normalzustand versetzt.
    Wie das jedoch gehen könnte, weiß ich rein garnicht!

    Danke für jede Hilfe,
    Elrontur
     
    #1
  2. Werbung
    Online

    Werbung

  3. Hecke29
    Online

    Hecke29

    Ich verstehe ehrlich gesagt das Problem nicht?
    Was muss mit dem '&' in der URL passieren? Das ist einfach eine Aneinanderreihung von GET-Parametern...

    Edit: Achso, falls die URL auf die du weiterleitest ein '&' enthält. Ich verstehe... Ich denk mal drüber nach
     
    #2
  4. Benni1000
    Offline

    Benni1000 Ehem. Teammitglied

    Registriert seit:
    4. Mai 2012
    Beiträge:
    1.398
    Mein lösungsvorschlag wäre es die URL einfach in einen base64 string zu verwandeln.
     
    #3
  5. Elrontur
    Offline

    Elrontur Ehem. Teammitglied

    Registriert seit:
    5. April 2013
    Beiträge:
    138
    Minecraft:
    Elrontur
    Eigentlich sollte ja urlencode(); ausreichen.
    Ist das eine bessere Variante mit dem base64?

    Und wie krieg ich es hin, das PHP sich die URLs selbst heraussucht, denn ich will nicht jedem Link irgendsoeine PHP-Funktion reinhauen. :D
    (Sagen wir mal, zu faul dafür...)
     
    #4
  6. Benni1000
    Offline

    Benni1000 Ehem. Teammitglied

    Registriert seit:
    4. Mai 2012
    Beiträge:
    1.398
    Ok ich sehe das Problem das du hast.
    Ich habe eine Lösung entwickelt die funktioniert und anscheinend ist sie auch relativ XSS sicher ist:

    Code (Text):
    1.  
    2. <?php
    3.  
    4.  
    5. $pos = strpos($_SERVER['REQUEST_URI'], "/url/");
    6.  
    7.  
    8. if ($pos !== FALSE) {
    9.     $url = substr($_SERVER['REQUEST_URI'], $pos + 5);
    10.     if (filter_var($url, FILTER_VALIDATE_URL)) {
    11.         echo "Klicke hier um weiter zu kommen: <a href='$url' >$url</a>";
    12.     } else {
    13.         die("INVALID URL");
    14.     }
    15. } else {
    16.     die("INVALID URL");
    17. }
    18.  

    Das legst du in einer einzelnen PHP Datei ab z.b redirect.php, und die links müssen dann so aussehen:
    Code (Text):
    1. http://deinhoster.com/redirect.php/url/[COLOR=#ff0000]http://weiterleitungsurl.de/?q=es geht[/COLOR]
     
    #5
  7. Elrontur
    Offline

    Elrontur Ehem. Teammitglied

    Registriert seit:
    5. April 2013
    Beiträge:
    138
    Minecraft:
    Elrontur
    Danke Benni1000! :)
    Deine Variante, auch wenn verändert, funktioniert.

    Ich habe sie so umgebastelt und funktioniert nun mit meinen Links. :D
    PHP:
    1. <?php
    2.   if(isset($_GET['r'])) {    
    3.     $pos = strpos($_SERVER['REQUEST_URI'], "&r=");
    4.  
    5.     if ($pos !== FALSE) {
    6.         $url = substr($_SERVER['REQUEST_URI'], $pos + 3);
    7.         if (filter_var($url, FILTER_VALIDATE_URL)) {
    8.             echo "<h1>Weiterleitung</h1>
    9.                  Du verlässt <b>&raquo;Rontu&laquo;</b> gleich, um eine externe Website zu besuchen!
    10.                  Ich, Elrontur, übernehme keine Verantwortung für die externe Seite oder dessen Inhalte. <br>
    11.                  Bist du nicht einverstanden damit, kannst du diese Seite verlassen und dich wieder meiner Seite widmen.
    12.                  Wenn du damit einverstanden bist, dann klicke auf den Link:
    13.                  <ul>
    14.                    <li> <a href=\"$url\">$url</a>
    15.                  </ul>";
    16.         } else {
    17.           die("<h1>Das Weiterleitungs-Ziel ist keine gültige Webadresse!</h1>
    18.                Probiere den Link nocheinmal aus.
    19.                Falls dies nicht helfen sollte, gib die URL direkt im Browser ein!");
    20.         }
    21.     } else {
    22.       die("<h1>Das Weiterleitungs-Ziel ist leer!</h1>
    23.          Probiere den Link nocheinmal aus.
    24.          Falls dies nicht helfen sollte, gib die URL direkt im Browser ein!");
    25.     }
    26.   } else {
    27.     die("<h1>Es wurde kein Weiterleitungs-Ziel angegeben!</h1>
    28.        Probiere den Link nocheinmal aus.
    29.        Falls dies nicht helfen sollte, gib die URL direkt im Browser ein!");
    30.   }
    31. ?>
     
    #6