Marco: Script

Hallo,

ich habe ein problem mit einem script. das ist ein witze portal. das findet man hier:

http://www.webhilfe.info/downloadsystem/index.php?mekat=Eigene_Scripts&user_sort_top=&down_id=6

das script benötigt php und mysql. ich habe das script installiert. es fuktioniert nur nicht. er hat die tabellen in der db erstellt. und das script lässt sich auch öffnen. nur kann ich auf nichts klicken. also irgendwo muss ein fehler sein.

hier ist es auf meiner seite.

http://www.send-sms-4-free.de/whwitzeportal/index.php

egal wo man rauf klickt. er lädt dann kurz die seite. zeigt mir aber immer nur die startseite an.

habe alle datei hochgeladen. die tabellen sind auch erst worden.
habe das verscuht nochmal zu installieren aber erfolglos. das problem besteht weiterhin.

ich hoffe mir kann jemand sagen woran das liegt.

ich danke euch für eure hilfe.

ps: über google finde ich keine hilfe dazu

vieleicht hat ja jemand kurz zeit um das zu installieren. um zu gucken ob das problem auch bei sich auf taucht

wünsche euch noch ein wunderschönes we

mfg maeggi

  1. Hallo Marco,

    habe alle datei hochgeladen. die tabellen sind auch erst worden.
    habe das verscuht nochmal zu installieren aber erfolglos. das problem besteht weiterhin.

    ich hoffe mir kann jemand sagen woran das liegt.

    so wie es aussieht, verläßt Du Dich auf register_globals = on, eine Einstellung
    die bereits seit Jahren standardmäßig nicht mehr so gesetzt wird, siehe http://www.php.net/manual/de/security.globals.php.

    Ich habe nirgendwo einen Zugriff auf $_GET['action'] gesehen, aber Du greifst gleich auf die Variable $action zu ...

    Freundliche Grüße

    Vinzenz

    1. so wie es aussieht, verläßt Du Dich auf register_globals = on, eine

      also bei mir in der /etc/php4/apache2/php.ini steht
      register_globals = Off

      mein safemod ist auf off liegt es vieleicht daran?
      safe_mode = Off

      mfg maeggi

      1. Hallo

        also bei mir in der /etc/php4/apache2/php.ini steht
        register_globals = Off

        sag' ich doch :-)

        Schreibe Dein Skript um, so dass es mit register_globals = Off zurecht kommt.

        Nochmals:
        Woher kommt die Variable $action?
        Wo weist Du dieser Variablen einen Wert zu?

        Freundliche Grüße

        Vinzenz

        1. okay.
          das ist nicht mein script, also ich habe das script nicht geschrieben. das habe ich von da

          http://www.webhilfe.info/downloadsystem/index.php?mekat=Eigene_Scripts&user_sort_top=&down_id=6

          Schreibe Dein Skript um, so dass es mit register_globals = Off zurecht >>kommt.

          Nochmals:
          Woher kommt die Variable $action?
          Wo weist Du dieser Variablen einen Wert zu?

          puh. leider habe ich da überhaupt keine kenntnisse drine.
          also kann ich das leider nicht so umschreiben. kann man das nicht irgendwie noch anders machen? ausser register_globals = Off
          auf ON zustellen oder umzuschreiben?

          mfg marco

          1. Hello,

            Schreibe Dein Skript um, so dass es mit register_globals = Off zurecht >>kommt.

            Um es zu TESTEN, ob es daran liegt, kannst Du ggf. NUR FÜR DAS EINE SCRIPT Register_Globals auf on stellen. Das sollte dann aber nicht so bleiben, wenn Du weißt, woran es liegt.

            Dafür benötigst Du Override-Rechte für das Verzeichnis in dem das Script liegt. Dann kannst Du mit einem Eintragb in einer .htaccess-Datei im Verzeichnis

            <Files scriptname.php>
                 php_value register_globals 1
              </Files>

            die Einstellung ändern.

            oder eigentlich richtig:

            <Files scriptname.php>
                 php_flag register_globals on
              </Files>

            Zweiteres versteht aber nicht jede Serverversion.

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

            1. ich habe es geteste. wenn ich Register_Globals auf on stelle.
              funkioniert das script. also liegt es an Register_Globals= Off.

              ich würde das ja gerne umschreiben das script aber das kann ich leider nicht. würde auch gerne Register_Globals auf on stellen. aber das ist mir viel zu unsicher.

              mfg marco

              1. Hallo

                ich habe es geteste. wenn ich Register_Globals auf on stelle.
                funkioniert das script. also liegt es an Register_Globals= Off.

                sag' ich doch :-) Ich hab' in den Code geschaut!

                Zusätzlich scheint sich das Skript darauf zu verlassen, dass die Magic Quotes
                aktiviert sind, insgesamt sieht es so aus, als habe der Ersteller keine
                Ahnung davon, wie man Daten in einer MySQL-Datenbank speichert.

                Das Skript ist jedenfalls anfällig für SQL-Injection. Ich würde es nicht einsetzen :-)

                Bitte teste doch einmal die Eingabe von

                O'Brien

                als Name.

                Freundliche Grüße

                Vinzenz

                1. Das Skript ist jedenfalls anfällig für SQL-Injection. Ich würde es nicht einsetzen :-)

                  kann ich das nicht irgendwie noch schützen?

                  Bitte teste doch einmal die Eingabe von

                  O'Brien

                  als Name.

                  was meinst du denn damit?

                  mfg marco

                  1. Hallo Marco,

                    kann ich das nicht irgendwie noch schützen?

                    sicher geht das. Es läuft aber irgendwie auf "komplett neu schreiben" heraus.

                    Bitte teste doch einmal die Eingabe von

                    O'Brien

                    als Name.

                    was meinst du denn damit?

                    Du hast es doch nach Toms Anleitung lauffähig bekommen.
                    Trage einen Witz ein. Gib' als Name O'Brien ein. Alternativ kannst Du auch
                    einfach ein einfaches Anführungszeichen im Witztext einfügen.

                    Sind die Magic Quotes bei Deinem Server ausgeschaltet (was eine gute Einstellung
                    ist), dann crasht das Skript :-) Sind sie eingeschaltet, dann wird der Witz
                    eingetragen.

                    Freundliche Grüße

                    Vinzenz

                    1. sicher geht das. Es läuft aber irgendwie auf "komplett neu schreiben" heraus.

                      schreibst du es dann für mich neu? :)

                      Bitte teste doch einmal die Eingabe von

                      O'Brien

                      also der witz wird eingetragen. ohne probleme

                      1. Hello,

                        sicher geht das. Es läuft aber irgendwie auf "komplett neu schreiben" heraus.

                        schreibst du es dann für mich neu? :)

                        Sollte das jetzt ein Witz werden? :-)

                        Wir können Dir sicher dabei helfen, dass Du das selber hinbekommst, aber dafür musst Du natürlich die Grundlagen von PHP drauf haben. Hattest Du eigentlich mal das Tutorial von Quake durchgearbeitet?
                        http://tut.php-quake.net/

                        Das wäre der Stand, den Du brauchst, um Dein Script neu schreiben zu können.

                        Deine Scripte haben verschiedene Krankheiten.

                        • weil Magic_Quotes eingeschaltet ist, müssten die Maskierungen ()
                            aus den Importdaten ($_GET, $_POST, ...) wieder entfernt
                            werden. Alternativ Magic_Quotes ausschalten.

                        • Alle Variablen suchen, auf die zugegriffen wird, obwohl sie
                            nicht deklariert/definiert wurden. Die meisten davon kommen
                            dann vermutlich vom Client. Diese sollten dann umgeschrieben
                            werden auf $_GET['variablenname'], $_POST['variablenname'], ...

                        • Daten für Datenbankzugriffe müssen escaped werden

                        • Eine Fehlerbehandlung muss eingebaut werden

                        • Trennung von Eingabe-, Verarbeitungs-, Ausgabe-Teil im Script
                            wird dringend angeraten.

                        • Die Form der Scripte könnte besser sein, sodass man sie auch
                            verstehen kann beim Lesen. Das ist aber für die Funktion sekundär.

                        • Alle Ausgaben müssen für den HTML-Kontext vorbereitet werden
                            $zu =  "<a href="index.php?action=kat&katid2=$katid2&page=".$i2."">&lt; zurück</a>";
                            Da müssen die &-Zeichen als &amp; geschrieben werden
                            print ($tpl);
                            da müssen sicher auch html-eigene Zeichen ersetzt werden.

                        • wenn alle Scripte in einem Verzeichnis liegen, sollte die
                            "config.php" wenigstens umbenannt werden in ".config.php", also
                            mit führendem Punkt. Dann sorgt bei ausgefallenem PHP-Parser
                            (hoffentlich) der Webserver noch dafür, dass die Datei nicht
                            ausgeliefert wird.

                        • Nach Datenbank-Queries sollte man hinterher auch das Resultset
                            wieder freigeben, wobei das bei diesem Script wohl noch keine
                            Probleme geben wird mit dem Speicher. Am Scriptende wird es ja
                            automatisch gemacht. Angewöhnen sollte man sich sowas aber nicht.

                        • alle Templates müssen auf valides HTML überprüft werden.
                            anfangen mit der Dateie header.htm
                            Es fehlen Document-Type und Angaben zur Codierung

                        • Es könnte CSS eingeführt werden

                        Das ist erstmal das, was mir beim Durchsehen so aufgefallen ist.

                        Harzliche Grüße vom Berg
                        http://bergpost.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
                        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

                        1. hallo,

                          puh, das ist ja ne ganze menge arbeit. dazu brauch ich ja wochen, bis das script fertig ist.
                          also ich glaube das lasse ich lieber. wenn das html gewessen wäre, würde ich das in angriff nehmen. da ich html besser kann als php. php behersche ich so gut wie garnicht.
                          dann werde ich mir wohl ein neues script suchen müssen.
                          ich danke euch aber trotzdem für eure schnelle und gute hilfe.
                          wünsche euch noch ein wunderschöne we

                          mfg maeggi

                          1. hallo,

                            also ich habe jetzt die ganze nacht und ganzen tag daran gewerckelt. bekomme aber eine fehlermeldung.

                            Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/sms/whwitzeportal/index.php on line 9

                            hier mal die index.php

                            index.php alt

                              
                            <?php  
                            require ("global.php");  
                            if($action == "") $action = "kat";  
                            if($action == "kat") {  
                            if($katid2 == "") {$text_bit = "Bitte wähle Links eine Kategorie aus!";  
                            eval("\$tpl->out(\"".$tpl->get("index")."\");");  
                            exit;   }  
                             $i = 1;  
                            $rows = mysql_query("SELECT * FROM ".$prefix."log where kat = $katid2 && free = 0");  
                             $rows = mysql_num_rows($rows);  
                                     $proseite = $anzpropage;  
                                     $seiten=ceil($rows/$proseite);  
                                     $start=$_GET['page'] * $proseite;  
                                     $ende = $start + $proseite;  
                            if ($ende>$row) { $ende = $row; }  
                            $db->query("SELECT * FROM ".$prefix."log where kat = $katid2 && free = 0 LIMIT $start,$proseite");  
                            while($row = $db->fetch())  
                            {  
                             $autor = $row['autor'];  
                             $zeit = date("d.m.Y", $row['time']);  
                             $text2 = nl2br($row['text']);  
                                     $text2 = $text2;  
                             $witzcolor = ($i % 2) ? "$tbg" : "$tbg2";  
                             $i++;  
                            eval("\$text_bit .= \"".$tpl->get("text_bit")."\";");  
                            }  
                            if ($_GET['page']>0) {  
                                $i2=$_GET['page']-1;  
                                $zu =  "<a href=\"index.php?action=kat&katid2=$katid2&page=".$i2."\">&lt; zurück</a>";  
                            }  
                            else $zu = "";  
                            if ($_GET['page']<$seiten) {  
                                $i2=$_GET['page']+1;  
                                $vor = "<a href=\"index.php?action=kat&katid2=$katid2&page=".$i2."\">weiter&gt;</A>";  
                            }  
                            else $vor = "";  
                            eval("\$tpl->out(\"".$tpl->get("index")."\");");  
                            }  
                              
                            //Witze eintragen  
                            if($action == "insert") {  
                            if($uweon == 1){  
                            $ameldung = "Funktion vom Admin deaktiviert";  
                            eval("\$tpl->out(\"".$tpl->get("meldungen")."\");");  
                            exit; }  
                              
                              
                             $db->query("SELECT * FROM ".$prefix."log where katid != ''");  
                            while($row = $db->fetch())  
                            {  
                             $kategorie2 = $row['kategorie'];  
                             $katid3 = $row['katid'];  
                            eval("\$insert_bit .= \"".$tpl->get("insert_bit")."\";");  
                            }  
                            if($step != "eintrag")  
                            {  
                             $eingetragen1 = "";  
                            }  
                            else  
                            {  
                            if($name == "") {$fehler1 = "Fehler: Bitte wähle einen Namen!";  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            exit;   }  
                            if($katid3 == "") {$fehler3 = "Fehler: Keine Kategorie ausgewählt!";  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            exit;   }  
                            if($witz == "") {$fehler2 = "Fehler: Kein Witz eingetragen!";  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            exit;   }  
                            $time = time();  
                            $witz = htmlspecialchars($_POST['witz']);  
                            $name = htmlspecialchars($_POST['name']);  
                              
                            $db->query("INSERT INTO ".$prefix."log VALUES ('', '', '$einkat', '$time', '$witz', '$name', '', '1', '')");  
                             $eingetragen1 = "<b>Witz erfolgreich hinzugefügt</b>";  
                            }  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            }  
                            if($action == "impressum") {  
                            $db->query("SELECT * FROM ".$prefix."options");  
                            $db->fetch();  
                                     $impressum = nl2br($db->record['impressum']);  
                            eval("\$tpl->out(\"".$tpl->get("impressum")."\");");  
                            }  
                            if($action == "kontakt") {  
                            $db->query("SELECT * FROM ".$prefix."options");  
                            $db->fetch();  
                                     $email = $db->record['email'];  
                            eval("\$tpl->out(\"".$tpl->get("kontakt")."\");");  
                            }  
                            if($action == "gb") {  
                            eval("\$tpl->out(\"".$tpl->get("gb")."\");");  
                            }  
                              
                            ?>  
                            
                            

                            hier die index.php neu

                              
                            <?php  
                            require ("global.php");  
                            if($_GET['action'] == "") $action = "kat";  
                            if($action == "kat") {  
                            if($_GET['katid2'] == "") {$text_bit = "Bitte wähle Links eine Kategorie aus!";  
                            eval("\$tpl->out(\"".$tpl->get("index")."\");");  
                            exit;   }  
                             $i = 1;  
                            $rows = mysql_query("SELECT * FROM ".$prefix."log where kat = $_GET['katid2'] && free = 0");  
                             $rows = mysql_num_rows($rows);  
                                     $proseite = $anzpropage;  
                                     $seiten=ceil($rows/$proseite);  
                                     $start=$_GET['page'] * $proseite;  
                                     $ende = $start + $proseite;  
                            if ($ende>$row) { $ende = $row; }  
                            $db->query("SELECT * FROM ".$prefix."log where kat = $_GET['katid2'] && free = 0 LIMIT $start,$proseite");  
                            while($row = $db->fetch())  
                            {  
                             $autor = $row['autor'];  
                             $zeit = date("d.m.Y", $row['time']);  
                             $text2 = nl2br($row['text']);  
                                     $text2 = $text2;  
                             $witzcolor = ($i % 2) ? "$tbg" : "$tbg2";  
                             $i++;  
                            eval("\$text_bit .= \"".$tpl->get("text_bit")."\";");  
                            }  
                            if ($_GET['page']>0) {  
                                $i2=$_GET['page']-1;  
                                $zu =  "<a href=\"index.php?action=kat&katid2=$_GET['katid2']&page=".$i2."\">&lt; zurück</a>";  
                            }  
                            else $zu = "";  
                            if ($_GET['page']<$seiten) {  
                                $i2=$_GET['page']+1;  
                                $vor = "<a href=\"index.php?action=kat&katid2=$_GET['katid2']&page=".$i2."\">weiter&gt;</A>";  
                            }  
                            else $vor = "";  
                            eval("\$tpl->out(\"".$tpl->get("index")."\");");  
                            }  
                              
                            //Witze eintragen  
                            if($_GET['action'] == "insert") {  
                            if($uweon == 1){  
                            $ameldung = "Funktion vom Admin deaktiviert";  
                            eval("\$tpl->out(\"".$tpl->get("meldungen")."\");");  
                            exit; }  
                              
                              
                             $db->query("SELECT * FROM ".$prefix."log where katid != ''");  
                            while($row = $db->fetch())  
                            {  
                             $kategorie2 = $row['kategorie'];  
                             $katid3 = $row['katid'];  
                            eval("\$insert_bit .= \"".$tpl->get("insert_bit")."\";");  
                            }  
                            if($step != "eintrag")  
                            {  
                             $eingetragen1 = "";  
                            }  
                            else  
                            {  
                            if($name == "") {$fehler1 = "Fehler: Bitte wähle einen Namen!";  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            exit;   }  
                            if($katid3 == "") {$fehler3 = "Fehler: Keine Kategorie ausgewählt!";  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            exit;   }  
                            if($witz == "") {$fehler2 = "Fehler: Kein Witz eingetragen!";  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            exit;   }  
                            $time = time();  
                            $witz = htmlspecialchars($_POST['witz']);  
                            $name = htmlspecialchars($_POST['name']);  
                              
                            $db->query("INSERT INTO ".$prefix."log VALUES ('', '', '$einkat', '$time', '$witz', '$name', '', '1', '')");  
                             $eingetragen1 = "<b>Witz erfolgreich hinzugefügt</b>";  
                            }  
                            eval("\$tpl->out(\"".$tpl->get("einsenden")."\");");  
                            }  
                            if($_GET['action'] == "impressum") {  
                            $db->query("SELECT * FROM ".$prefix."options");  
                            $db->fetch();  
                                     $impressum = nl2br($db->record['impressum']);  
                            eval("\$tpl->out(\"".$tpl->get("impressum")."\");");  
                            }  
                            if($_GET['action'] == "kontakt") {  
                            $db->query("SELECT * FROM ".$prefix."options");  
                            $db->fetch();  
                                     $email = $db->record['email'];  
                            eval("\$tpl->out(\"".$tpl->get("kontakt")."\");");  
                            }  
                            if($_GET['action'] == "gb") {  
                            eval("\$tpl->out(\"".$tpl->get("gb")."\");");  
                            }  
                              
                            ?>  
                            
                            

                            ich bekomme aber eine fehlermeldung.

                            Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/sms/whwitzeportal/index.php on line 9

                            ich hoffe ihr könnt mir da weiter helfen. ich finde den fehler nicht.

                            mfg maeggi

                            1. Hello,

                              also ich habe jetzt die ganze nacht und ganzen tag daran gewerckelt. bekomme aber eine fehlermeldung.

                              Du fängst am falschen Ende an mit den Änderungen für Dein Script

                              1. Error_Reporting auf E_ALL einstellen
                                 das geht entweder in der .htaccess-Datei

                              php_value error_reporting 6143

                              siehe auch http://de3.php.net/manual/en/function.error-reporting.php
                                 Wie Du es auf einzelne Files beschränken kannst, weißt Du ja schon.
                                 Würde ich aber nicht machen, lieber sauber Coden

                              2. Mit Hilfe der nun erscheinenden Notices alle Variablen finden, die nicht im Script
                                 selbst definiert werden, sondern von außen kommen. Diese in $_POST[], $_[GET] usw.
                                 umbauen, je nachdem, aus welcher Quelle sie stammen müssen.
                                 Immer mit

                              if (isset($_POST['variable']))     ## oder eben $_GET ...

                              nachfragen, ob der Wert überhaupt existiert

                              Erst, wenn Du dies Arbeit in allen Scripten erledigt hast, lohnt es sich, weiterzumachen.

                              Wenn Du schon die .htaccess bearbeitest, kannst Du auch gleich noch reinschreiben

                              php_value magic_quotes_gpc 0         ## oder

                              php_flag magic_quotes_gpc off        ## wenn das funktioniert

                              Ab diesem Zeitpunkt ist aber Deine Datenbank gefährdet, wenn das Script öffentlich zugänglich ist oder Du selber dummes Zeug übergibst im Request. Die Datenbankabfragen müssen dann also dringend mit

                              mysql_real_escape_string(..., $connection)

                              http://de3.php.net/manual/en/function.mysql-real-escape-string.php

                              abgesichert werden

                              Harzliche Grüße vom Berg
                              http://bergpost.annerschbarrich.de

                              Tom

                              --
                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                              Nur selber lernen macht schlau
                              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)