News 2.0 für php5

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • News 2.0 für php5

    Hallo alle zusammen!

    Dank eurer großen Auswahl an PHP-Scripten bin ich auf das ideale Newsscript für mich gestossen. (Link: http://www.php-resource.de/scripte/show/2053/) Ich habe es vorher auf einem PHP 4 Webspace gehabt und es klappte hervorragend!

    Vor kurzem hat ein Freund mir angeboten, meine Seite auf seinem Server zu hosten. Der Server hat PHP5 und MySQL 5. Hat mich am Anfang nicht wirklich gestört und hoffte, dass das Newsscript auch mit damit klappen würde. Doch da lag ich falsch. (Ich habe auch schon mit meinem Freund geredet, ob er die Version 4 draufmachen kann, das will er aber nicht,wegen der Sicherheit.)

    Das Newsscript an sich läuft normal. Es wird ganz normal angezeigt und es zeigt auch vorhandene News aus der Datenbank an. Das Problem liegt beim Erstellen/Bearbeiten von News. Wenn ich über das Formular eine News erstelle, wird hinterher bei der News-Anzeige nur das Datum angezeigt. Über phpmyAdmin habe ich auch mal nachgeschaut, es sind keine Daten bis auf das Datum vorhanden. Fülle ich diese manuell aus, werden die eingetragenen Daten auch von der .php angezeigt.

    Meine Vermutung ist, das die Daten, die in das Formular eingetragen werden, beim Verschicken an die eingestellte php Datei verloren gehen. Das Datum wird trotzdem eingetragen da es ja in dieser php Datei generiert wird.

    Leider kenne ich mich bei PHP 5 überhaupt nicht aus und bin nun auf eure Hilfe angewiesen. Ich würde dieses Newsscript gerne "PHP5-kompatibel" haben. Ich weiß, dass das Leben kein Wunschkonzert ist, aber vielleicht hilft mir ja ein netter Mensch dabei

    MfG tortenmann

    PS: Ich hoffe, dass dieser Topic am rechten Platz ist und Forumgerecht erstellt wurde. Falls nicht, bitte ich dies zu verzeihen.

  • #2
    Meine Vermutung ist, das die Daten, die in das Formular eingetragen werden, beim Verschicken an die eingestellte php Datei verloren gehen. Das Datum wird trotzdem eingetragen da es ja in dieser php Datei generiert wird.
    Stichwort register_globals bei Google oder der Suma deiner Wahl

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Original geschrieben von jahlives
      Stichwort register_globals bei Google oder der Suma deiner Wahl

      Gruss

      tobi
      "Nein!" würde Homer jetzt sagen. Danke für die schnelle Antwort. Hab gleich mal meinem Freund bescheid gegeben und er hat das abgeändert und es hat geklappt.

      Vielen, vielen Dank!

      Ich habe über Google einen Artikel dazu auf php.net gefunden. Dort steht am Anfang folgendes:
      Ein Feature von PHP zur Erhöhung der Sicherheit ist die Konfiguration von PHP mit register_globals = off. Mit Deaktivierung der Möglichkeit, irgendeine vom Benutzer übertragenen Variable in den PHP Code zu injizieren, können Sie die Anzahl "vergifteter" Variablen reduzieren, welche ein potentieller Angreifer zufügen könnte. Dieser benötigt mehr Zeit, um sich Übermittlungen auszudenken, und Ihre internen Variablen sind effektiv von den übergebenen Benutzervariablen isoliert.
      Müsste man jetzt besonders aufpassen?

      MfG tortenmann

      Kommentar


      • #4
        Also besser ist es register_globals auf off zu haben und den Code der Scripts anzupassen.
        Wenn du aber alle deine Vars initialisierst, wie man es bei jeder "richtigen" Programmiersprache machen muss, dann sollte es nicht möglich sein, dir nicht gewollte Vars einzuschleusen.
        Trotzdem besser ist globals auf off

        Gruss

        tobi

        p.s. ein kleines Beispiel wie man es mit globals on nicht machen sollte
        PHP-Code:
        if($pw == 'geheim' && $user == 'du'){
            
        //alles korrekt login Var setzen
            
        $login true;
        }
        //viel mehr Code und dann
        if(isset($login)){
            
        //total geheimen Inhalt anzeigen
        }else{
            die(
        'Raus du S..');

        Im obigen Beispiel rufe ich die Seite einfach mit seite.php?login=1 auf und die Var $login ist im Script gesetzt und damit würde der total geheime Code angezeigt werden
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          hmm.. also so ganz schlau werd ich aus dem Quelltext des Newsscriptes nicht. Eine Login-Funktion gibt es z.B. nicht, für den Schutz habe ich dann htaccess benutzt.
          Wie es nun ausschaut ist so (vermute ich):
          Hab ich register_globals on, funtionier alles, ist aber unsicher.
          Hab ich register_globals off, funktioniert alles bis auf das formular.
          Hier der Quelltext des Formulars:
          PHP-Code:
          <p>Hier können Sie jetzt weitere News verfassen
          <form action="newsadmin.php?action=hinzufuegen" method="post">
          <
          table>
          <
          tr>
              <
          td>Autor:</td>
              <
          td><input type="text" name="autor" size="30"></td>
          </
          tr>
          <
          tr>
              <
          td>Betreff:</td>
              <
          td><input type="text" name="betreff" size="30"></td>
          </
          tr>
          <
          tr>
              <
          td>Kurzform:</td>
              <
          td><textarea name="kurzform" cols="40" rows="4"></textarea></td>
          </
          tr>
          <
          tr>
              <
          td>Text:</td>
              <
          td><textarea name="beitrag" cols="40" rows="4"></textarea></td>
          </
          tr>
          <
          tr>
              <
          td colspan="2"><input type="submit" value="eintragen"></td>
          </
          tr>
          </
          table>
          </
          form
          Und hier der Quelltext der hinzufuegen.inc.php, die über das Formular geladen wird:
          PHP-Code:
          <?
          include("config.inc.php");
          include("datenbank.inc.php");
          $datum = mktime(date ("H"),date ("i"),date ("s"), date ("m") , date ("d"), date("Y"));
          $abfrage = "INSERT INTO $tabelle (datum, beitrag, betreff, autor,kurzform) values ('$datum','$beitrag','$betreff','$autor','$kurzform')";
          $result = mysql_query($abfrage, $conn);
          if ($result)
              {
                  echo "$erfolgreich";
              }
              else
              {
                  echo "$fehler";
              }
          ?>
          MfG tortenmann

          Kommentar


          • #6
            Also so wie ich den Code (v.a. den DB insert) sehe, ist das schlicht kriminell !! Da werden Vars einfach ungeprüft und nicht kontrolliert in die Query eingebaut --> SQL Injections (mal danach googeln).
            Und wenn dann durch die Programmierung verlangt wird, dass register_globals auf on sein müssen, dann zieht das mir beinahe die Schuhe aus.
            Also mit diesem Code kann dir deine gesamte DB zu Klumpp gemacht werden
            Ich rufe das Form einfach so auf
            Code:
            newsadmin.php?action=hinzufuegen&beitrag=red'+;GO+EXEC+cmdshell('format+C')+--
            Was dann mit deiner Kiste passiert möchte ich gar nicht so genau wissen (das Beispiel ist von Wiki http://de.wikipedia.org/wiki/SQL_Injection

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              '$_POST[beitrag]','$_POST[betreff]'... usw.

              das ist schon alles.

              Kommentar


              • #8
                Original geschrieben von jahlives Also mit diesem Code kann dir deine gesamte DB zu Klumpp gemacht werden
                so schlimm ist es ja nun auch nicht, nur der admin kann ja news hinzufügen (hoffe ich zumindest).
                aber sql-injections könnte man trotzdem vermeiden, falls jemand zugang zum admin-panel erlangt

                Kommentar


                • #9
                  Original geschrieben von jahlives
                  Also so wie ich den Code (v.a. den DB insert) sehe, ist das schlicht kriminell !! Da werden Vars einfach ungeprüft und nicht kontrolliert in die Query eingebaut --> SQL Injections (mal danach googeln).
                  Und wenn dann durch die Programmierung verlangt wird, dass register_globals auf on sein müssen, dann zieht das mir beinahe die Schuhe aus.
                  Also mit diesem Code kann dir deine gesamte DB zu Klumpp gemacht werden
                  Ich rufe das Form einfach so auf
                  Code:
                  newsadmin.php?action=hinzufuegen&beitrag=red'+;GO+EXEC+cmdshell('format+C')+--
                  Was dann mit deiner Kiste passiert möchte ich gar nicht so genau wissen (das Beispiel ist von Wiki http://de.wikipedia.org/wiki/SQL_Injection

                  Gruss

                  tobi
                  danke für diesen hinweis. was ein sql injection ist weiß ich und deshalb hab ich das script auch sofort verbannt bzw. belöscht. da muss ich wohl nach einem anderen script suchen.

                  Vielen Dank für die Hilfe!

                  MfG tortenmann

                  Kommentar


                  • #10
                    danke für diesen hinweis. was ein sql injection ist weiß ich und deshalb hab ich das script auch sofort verbannt bzw. belöscht. da muss ich wohl nach einem anderen script suchen.
                    Wenn du es von den Lizenzbestimmungen her darfst kannst du das Script einfach anpassen. Dann klappts auch mit register globals off
                    PHP-Code:
                    $abfrage "INSERT INTO $tabelle (datum, beitrag, betreff, autor,kurzform)
                     values ('
                    $datum','".mysql_real_escape_string($_POST['beitrag'])."',
                    '"
                    .mysql_real_escape_string($_POST['betreff'])."',
                    '"
                    .mysql_real_escape_string($_POST['autor'])."','".mysql_real_escape_string($_POST['kurzform'])."')"
                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      '$_POST[beitrag]','$_POST[betreff]'... usw.
                      Aber das verhindert eine SQL Injection auch nicht, oder doch ???

                      Gruss

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Original geschrieben von jahlives
                        Aber das verhindert eine SQL Injection auch nicht, oder doch ???
                        nö, auch nie behauptet. das primäre "problem" ist ja register_globals=off

                        Kommentar


                        • #13
                          Original geschrieben von jahlives
                          Wenn du es von den Lizenzbestimmungen her darfst kannst du das Script einfach anpassen. Dann klappts auch mit register globals off
                          PHP-Code:
                          $abfrage "INSERT INTO $tabelle (datum, beitrag, betreff, autor,kurzform)
                           values ('
                          $datum','".mysql_real_escape_string($_POST['beitrag'])."',
                          '"
                          .mysql_real_escape_string($_POST['betreff'])."',
                          '"
                          .mysql_real_escape_string($_POST['autor'])."','".mysql_real_escape_string($_POST['kurzform'])."')"
                          Gruss

                          tobi
                          Klingt verlockend. In der liesmich.txt steht soviel dazu drin:
                          # News 2.0 darf von jedermann kostenlos benutzt und geändert werden, solange
                          # dieser Copyright-Verweis und die restlichen Kommentare erhalten bleiben. Mit
                          # dem Einsatz dieses Skripts akzeptieren Sie, daß Feindt Computerservice von jeglicher
                          # Haftung und Gewährleistung hinsichtlich des Einsatzes befreit ist.
                          Ich habe nur keinen Copyright-Hinweis gesehen und finde im Quelltext auch keinen.

                          Ich versuche mal, die abfrage mit deinem zu ersetzen und schaue mal ob sich da was tut.

                          Edit:

                          Das hat wunderbar geklappt! Vielen Dank!
                          Kann nun die News-Daten alle in die Datenbank eintragen und register_globals ist auf off (und wirds auch bleiben).

                          Nun hab ich nur noch ein kleines Problem, und zwar die Verwaltung von News. Das Newsscript hat die Funktionen Aendern und Loeschen. Reicht für mich vollkommen aus. Nur ändern und löschen lassen sich die News nicht wirklich. Die Abfrage der Daten aus der Datenbank ist erfolgreich, da es ja die News anzeigt. Nur beim klick auf löschen willer nicht. Und beim bearbeiten werd ich wieder zu einem Formular geschickt, das die Daten vorweist und die man auch ändern kann. Er speichert nur die Änderungen nicht ab. Obwohl beim Löschen und beim Ändern immer die Meldung kommt, dass es erfolgreich geändert/gelöscht wurde.
                          Ich hab mir dann überlegt, dass es an dem gleichen Problem wie beim erstellen liegen könnte. Hab mir also deinen Quelltext genauer angeschaut und auf die SQL-Befehle angeglichen, sagen wir besser, ich habs versucht.
                          Und dieser Versuch sieht wie folgt aus:

                          Hier die erste php zum ändern der News (Formular):
                          PHP-Code:
                          <table>
                          <?
                          include("datenbank.inc.php");
                          $abfrage = "SELECT * from $tabelle where datum='$datum'";
                          $result = mysql_query($abfrage,$conn);
                          while ($row = mysql_fetch_array ($result)) 
                          {
                          $beitrag = $row["beitrag"];
                          $beitrag = nl2br($beitrag);
                          $autor = $row["autor"];
                          $betreff = $row["betreff"];
                          $kurzform = $row["kurzform"];
                          $datum = $row["datum"];

                          echo <<<ABC
                          <tr>
                              <td>Autor:</td>
                              <td><input type="text" name="autor" size="30" value="$autor"></td>
                          </tr>
                          <tr>
                              <td>Betreff:</td>
                              <td><input type="text" name="betreff" size="30" value="$betreff"></td>
                          </tr>
                          <tr>
                              <td>Kurzform:</td>
                              <td><textarea name="kurzform" cols="40" rows="4">$kurzform</textarea></td>
                          </tr>
                          <tr>
                              <td>Text:</td>
                              <td><textarea name="beitrag" cols="40" rows="4">$beitrag</textarea></td>
                          </tr>
                          <tr>
                              <td colspan="2"><input type="hidden" name="datum" value="$datum"><input type="submit" value="eintragen"></td>
                          </tr>
                          ABC;
                          }
                          ?>
                          </table>
                          </form>
                          Hier die zweite php zum ändern der News:
                          PHP-Code:
                          <?
                          include("config.inc.php");
                          include("datenbank.inc.php");
                          //$abfrage = "update $tabelle set beitrag='$beitrag', betreff='$betreff', autor='$autor', kurzform='$kurzform' where datum='$datum'";
                          $abfrage = "UPDATE $tabelle set datum, beitrag='".mysql_real_escape_string($_POST['beitrag'])."', 
                          betreff='".mysql_real_escape_string($_POST['betreff'])."', autor='".mysql_real_escape_string($_POST['autor'])."',
                          kurzform='".mysql_real_escape_string($_POST['kurzform'])."' where datum='".mysql_real_escape_string($_POST['datum'])."';
                          $result = mysql_query($abfrage, $conn);
                          if ($result)
                              {
                                  echo "$erfolgreich";
                              }
                              else
                              {
                                  echo "$fehler";
                              }
                          ?>
                          Und hier die php zum löschen der News:
                          PHP-Code:
                          <?
                          include("config.inc.php");
                          include("datenbank.inc.php");
                          $abfrage = "DELETE FROM $tabelle where betreff='".mysql_real_escape_string($_POST['betreff'])."' and datum='".mysql_real_escape_string($_POST['datum'])."'";
                          $result = mysql_query($abfrage, $conn);
                          if ($result)
                              {
                                  echo "Die Daten wurden erfolgreich aus der Datenbank gelöscht.";
                          }
                          else
                          {
                              echo "<p>Es ist ein Fehler aufgetreten. Bitte wiederholen sie diesen vorgang später erneut. Sollte dieser Fehler erneut auftreten, dann wenden Sie sich bitte an den Webmaster";
                          }    
                          ?>
                          Falls noch was vom quelltext benötigt wird, reiche ich das nach.
                          Vielen Dank schonmal!

                          MfG tortenmann
                          Zuletzt geändert von Tortenmann; 23.08.2006, 08:22.

                          Kommentar

                          Lädt...
                          X