Altes Php Script anpassen

  • Hallo,

    habe leider nur magere Kenntnisse von PHP und muss ein altes, von einem Ehemaligen, anpassen auf die neue PHP Version. Wurde damals sehr schlampig alles gemacht und ich komme gerade nicht weiter. Habe schon Variablen vordefiniert, Konstanten, Pfadangaben usw. Hier aber ein Problem das ich gerade logisch nicht ganz raffe. Get Methode ist mir klar soweit aber das Zusammenbauen und die Übergabe überfodert mich gerade.

    Aus einem anderen Dok kommt das hier an, kann aber auch ohne Werte aufgerufen werden, d.h. nur die index.php in edit.

    Quellcodeausschnitt:
    <a href=\"edit/index.php?index=edit.php&action=bearbeiten&InvIDDBsel=$InvID\">
    In der Zeile steht also folgendes z.B.:
    URL Blah /edit/index.php?index=edit.php&action=bearbeiten&InvIDDBsel=919

    Nun das Problem. In der Index PHP steht folgendes:
    <?php
    if ($index != "")
    {
    include("$index");
    }
    ?>

    Das ganze haut wohl nicht mehr hin weil $index nicht vordefiniert wurde. Wie mache ich das damit der Wert den ich übergebe nicht verloren geht?
    $index = $_GET['index']
    $action = $_GET['action']
    $InvID = $_GET['InvIDDBsel']
    So und dann irgendwie zusammenstöpseln?

    Naja etwas konfus vielleicht und warscheinlich pille palle aber bei der Hitze ist mein Hirn einfach zu lahm wohl und ich sitze da schon viel zu lange drüber. :cry:

    Hier auch mal beide Dateien gepastet:

    http://pastebin.com/3PdHYjan

    Wäre nett wenn mir jemand da weiterhelfen könnte

    Grüße,
    Peter

  • Habe den verlinkten Code gerade nur mal überflogen. Da ist eine Menge sehr unschönes Zeug drin. Im Prinzip würde ich dir raten das lieber komplett neu zu schreiben. Um ein wirklich sauberes Ergebnis zu bekommen ginge das sicherlich schneller als das da alles zu überarbeiten.

    Ich habe gerade nicht die Zeit (und ehrlich gesagt auch nicht so die Lust ;)) mir das alles genau zu Gemüte zu führen, ist ja jetzt auch nicht soo wenig Code.

    Aber zu deiner konkreten Frage zumindest:

    PHP
    $index = $_GET['index']
    $action = $_GET['action']
    $InvID = $_GET['InvIDDBsel']

    Das hast du grundlegend schonmal richtig erkannt.
    Die Prüfung sollte aber erweitert werden, mindestens um ein file_exists() um zu überprüfen ob die zu includierende Datei überhaupt existiert.
    Außerdem, als schnelle Lösung die schonmal ein wenig Sicherheit gegen manuelle Manipulation der GET-Parameter von Usern liefert, ein array anlegen, welches die Dateinamen enthält die includiert werden dürfen.
    Vor dem include dann halt prüfen ob die Datei includiert werden darf.

    z.B.:

    PHP
    $allowed_files = ("home.php" , "view.php" , "edit.php");
    if(isset($_GET['index']) && file_exists($_GET['index']) && in_array($_GET['index'] , $allowed_files)) {
      include($_GET['index']);
    }

    Außerdem dringend erforderlich: Die Verwendung von mysql_real_escape_string() auf alle Daten die vom User kommen und in Datenbank-Queries verwendet werden.
    Also z.b. alle POST- und GET-Daten.


    Mein Beileid übrigens, diesen Code überarbeiten zu müssen. Sowas macht in der Regel nicht gerade Spaß, besonders wenn man sich mit der Sprache nicht gut auskennt. ^^

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Hallo und Danke schon einmal,

    hauptmerkmal ist erst einmal das Ganze zum Laufen zu bekommen. Ist nur für eine Intranetanwendung gedacht die wieder ins Leben gerufen wurde. Eine Überarbeitung / Sicherheitsanpassung kommt erst danach. Das meiste habe ich bereits zum laufen bekommen, werde morgen vormittag dann deine Vorschläge mal versuchen umzusetzen und hoffe ich renne nicht zu lange gegen eine Wand ;)

    Grüße,
    Peter

  • Hmm super nicht angemeldet gewesen. Das komische ist ja das er mir keine Fehlermeldung ausspuckt sobald ich auf die /edit/index.php zugreifen will (selbst mit ($_GET..)) sondern ich einen HTTP 500 "Die Webseite kann diese Seite nicht anzeigen" zurückbekomme... hmm..


  • z.B.:

    PHP
    $allowed_files = ("home.php" , "view.php" , "edit.php");
    if(isset($_GET['index']) && file_exists($_GET['index']) && in_array($_GET['index'] , $allowed_files)) {
      include($_GET['index']);
    }

    Sorry, da fehlte natürlich in der ersten Zeile der Funktionsaufruf "array" zur Erstellung des arrays.
    Muss natürlich so aussehen:

    PHP
    $allowed_files = array("home.php" , "view.php" , "edit.php");
    if(isset($_GET['index']) && file_exists($_GET['index'])  && in_array($_GET['index'] , $allowed_files)) {
      include($_GET['index']);
    }

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook