ilch Forum » Ilch Clan 1.1 » Fehlersuche und Probleme » "Harcoded http" - usergally.php

Geschlossen
  1. #1
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.405
    Beitragswertungen
    389 Beitragspunkte
    Nachdem ich eine Änderung[1] an BB-Code 2.0 vorgenommen habe ist mir an der Usergallery noch was aufgefallen.

    Wenn man in der Usergallery ein Bild hochlädt, wird im Anschluss direkt ein Link zum Bild und zur kleineren Version des Bildes ausgegeben. Hier ist ebenfalls "http://" fest vorgegeben.

    Ich war da unschlüssig ob da ein relativer Pfad ausreichend ist und habe es dabei belassen einen absoluten Pfad auszugeben.

    /edit: Code entfernt, da fehlerhaft.
    [1] www.ilch.de/forum-showposts-52151.html

    Grüße
    blackcoder


    Zuletzt modifiziert von blackcoder am 04.01.2015 - 14:17:14
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.405
    Beitragswertungen
    389 Beitragspunkte
    isSecure()

    $_SERVER['HTTPS']
    ZitatZitat
    Wird auf einen nicht-leeren Wert gesetzt, wenn das Skript via HTTPS aufgerufen wurde.
    Hinweis: Beachten Sie bei der Verwendung von ISAPI unter IIS, dass der Wert auf off gesetzt wird, wenn der Request nicht mittels HTTPS erfolgte.


    $_SERVER['SERVER_PORT']
    ZitatZitat
    It turns out that the setting of the apache environment variable SERVER_PORT was always 443 irrespective of whether I was using http/80 or https/443 from the client.

    www.chrissearle.org/2008/02/29/Apache2_NameVirtualHosts_SSL_and_SERVER_PORT/

    Klingt suboptimal für den Fall wenn über HTTP und HTTPS ausgeliefert werden kann.

    php.net/manual/de/reserved.variables.server.php


    Eventuell ist realpath() noch interessant.

    php.net/realpath
    ZitatZitat
    realpath() löst alle symbolischen Verweise, '/./', '/../' und mehrere aufeinanderfolgende '/' Zeichen, die in path enthalten sind, auf und gibt den so entstehenden absoluten Pfad zurück.



    Zuletzt modifiziert von blackcoder am 04.01.2015 - 04:03:50
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.405
    Beitragswertungen
    389 Beitragspunkte
    So funktioniert es besser. Mit realpath() war ich nicht erfolgreich. Hat hier immer nur nichts zurückgegeben.

    Der Teil betreffend der Ausgabe (Zeile 30 und 31) ist jetzt nicht mehr doppelt und die Prüfung auf HTTPS funktioniert hier jetzt auch. Ich denke auf irgendwelche Fehlkonfigurationen usw. kann man keine Rücksicht nehmen. Zum Beispiel muss Port 443 nicht zwangsläufig HTTPS bedeuten.

    Wichtig ist auch, dass man ishttps() in Zeile 27 schreibt, anstatt ishttps. Im letzteren Fall war die if-Abfrage immer true.

    Index: usergallery.php
    ===================================================================
    --- usergallery.php	(revision 51)
    +++ usergallery.php	(revision 52)
    @@ -12,6 +12,14 @@
     $img_per_site = $allgAr['gallery_imgs_per_site'];
     $img_per_line = $allgAr['gallery_imgs_per_line'];
     
    +# Determine if HTTPS is used.
    +# bool True if HTTPS, false if not used.
    +function ishttps() {
    +  return
    +    (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')
    +    || $_SERVER['SERVER_PORT'] == 443;
    +}
    +
     # zeige alle gallery
     if (empty($uid)) {
     
    @@ -85,8 +93,12 @@
           @chmod($bild_thumb, 0777);
           echo '<b>Datei '.$name.'.'.$endung.' erfolgreich hochgeladen</b><br />';
           $page = $_SERVER["HTTP_HOST"]. dirname($_SERVER["SCRIPT_NAME"]);
    -      echo 'Bildlink: <a target="_blank" href="http://'.$page.'/'.$bild_url.'">http://'.$page.'/'.$bild_url.'</a><br />';
    -      echo 'Oder klein: <a target="_blank" href="http://'.$page.'/'.$bild_thumb.'">http://'.$page.'/'.$bild_thumb.'</a><br /><br />';
    +	  $prot = 'http://';
    +	  if (ishttps()) {
    +		$prot = 'https://';
    +	  }
    +      echo 'Bildlink: <a target="_blank" href="'.$prot.$page.'/'.$bild_url.'">'.$prot.$page.'/'.$bild_url.'</a><br />';
    +      echo 'Oder klein: <a target="_blank" href="'.$prot.$page.'/'.$bild_thumb.'">'.$prot.$page.'/'.$bild_thumb.'</a><br /><br />';
         }
       }
     }

    # Determine if HTTPS is used.
    # bool True if HTTPS, false if not used.
    function ishttps() {
      return
        (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')
        || $_SERVER['SERVER_PORT'] == 443;
    }
    
    ...
    
    $prot = 'http://';
    if (ishttps()) {
    	$prot = 'https://';
    }
    echo 'Bildlink: <a target="_blank" href="'.$prot.$page.'/'.$bild_url.'">'.$prot.$page.'/'.$bild_url.'</a><br />';
    echo 'Oder klein: <a target="_blank" href="'.$prot.$page.'/'.$bild_thumb.'">'.$prot.$page.'/'.$bild_thumb.'</a><br /><br />';
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten