kostenloser Webspace werbefrei: lima-city


Gästebuch programmiert - was kann man verbessern?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*******i

    Hi,
    ich lerne gerade PHP. Bisher habe ich es immer ohne geschafft aber jetzt will ich auch mal was kleines scripten. :biggrin:
    Nun habe ich versucht ein Gästebuch zu erstellen, das ohne Datenbank läuft. möglicht winzig ist und sich möglichst gut in eine bisherige Webseite integrieren lässt. Also erstmal einfach nur ein ganz simples Ding, ohne Designs und sowas. Es soll erstmal auch nur ein Test sein und nichts weiter.

    Das Script habe ich jetzt mal funktionsfertig erstellt. Nun würde ich gerne wissen, was ihr Experten hier im Forum davon haltet.

    Das Script besteht aus den Dateien "eintrag.html", der Startseite "gbook.php" und der Datei "gbk.php".
    Die gbook.php ist die Startseite. Diese wird in meine Page eingebunden.
    In der eintrag.html ist das Eintrag-Formular.
    Der Eintrag wird dann an die "gbk.php" weitergeleitet, die den Eintrag speichert.
    Dann gibt es noch die text.txt. In der Datei werden die Beiträge gespeichert.


    Das ist der Code bisher:

    eintrag.html:
    <form method="post" action="gbk.php">
    Name: <input type="text" name="name"><br>
    e-Mail: <input type="text" name="email"><br>
    Dein Eintrag: <textarea name="eintrag"></textarea><br>
    <input type="submit" name="Button" value="Absenden">
    </form>


    gbook.php:
    <center><h2>Gästebuch</h2>
    <a href="eintrag.html">Einen Eintrag schreiben</a></center>
    <?php
    $datenbank = "text.txt"; $datei = fopen($datenbank,"r");
    fpassthru($datei);
    ?>


    gbk.php:
    <?php
    $daten=$_POST[eintrag]."<br>von <a href=mailto:".$_POST[email].">".$_POST[name]."</a><br><br>";
    $datenbank = "text.txt";
    $datei = fopen($datenbank,"a");
    fwrite($datei, $daten);
    ?>
    Eintrag erfolgreich.
    <a href="gbook.php">Zum Gästebuch</a>


    Hier läuft das Script: http://schorschi.lima-city.de/gbk/gbook.php

    Was haltet ihr davon? Eine großartige Leistung ist es ja nicht, aber ist ja auch ein erster Versuch.:biggrin:
    Immerhin erreicht das Script meine Anforderungen; Es nutzt keine DB, ich kann es direkt in meine Site integrieren, und das Script ist nur 3 KB groß :biggrin:.
    Jetzt habe ich aber das Problem dass die text.txt frei sichtbar ist, owdurch jeder die E-Mail-Adressen der eingetragenen User sehen kann. Das sollte so nicht sein. Wie kann ich die text.txt von außen unsichtbar machen, so dass das Script darauf zugreift, aber nicht jemand von außen? Meine Überlegung war, einfach ein anderes Format für die Datei zu nutzen, aber das kann dann jeder runterladen und mit Notepad öffnen :slant:.

    Habt ihr sonst noch Ideen, was man besser machen kann? Bitte nichts extrem kompliziertes. An einen Admin-Bereich z.B. habe ich mich noch nicht rangetraut. :biggrin:

    Beitrag zuletzt geändert: 23.4.2010 15:47:15 von schorschi
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. du kannst ja neben deinem gästebuch auch radiobuttons machen wie sie die seite finden 1 schlecht und 5 gut oder so...
    wär mal ein vorschlag von mir...
  4. Aaalsoo... ich habe mein Gästebücher auch ohne Datenbank erstellt, jedoch kann man bei mir nicht die e-mails einlesen, was ganz praktisch ist :-D
    Außerdem habe ich das gesamte Gästebuch mit dem Element, wo man was eintragen kann und die funktion, die einen neuen Eintrag speichert, auf EINER seite. ich finde das einfach praktischer. ;-)
    und das funktioniert so:
    ich habe einen Ordner ("eintraege").
    in diesem Ordner sind die Nachrichten gespeichert (erste Nachricht heißt "1.php", zweite logischerweise "2.php" u.s.w. ...)
    in den einzelnen Nachrichtsdateien siehts so aus:
    <?php
      $name="trundle";
      $email="blabla@anbieter.de";
      $message="Hallo, Welt!.";
    ?>


    Sollte jemand eine Nachrichtdatei anbrowsen, bekommt er eine leere Seite, weil PHP die Variablen nicht ohne Befehl preisgibt. Fazit: die Messages sind geschützt.

    Wie liest man 1.php bis (irgend ne nummer).php jetzt aus?
    mit einer Schleife.
    <?php
      $i=1;
      while(file_exists("eintraege/".$i.".php")) {
        include("eintraege/".$i.".php");
        echo "Name: ".$name."<br />";
        echo "E-mail: ".$email."<br />";
        echo "Nachricht: ".$message."<br />";
        $i++;
      }
    ?>


    Wie speichert man was, sollte jemand was schreiben?
    <?php
      if($_POST) {
        $i=1;
        while(file_exists("eintraege/".$i.".php")) {
          $i++;
        }
        $file = fopen("eintraege/".$i.".php");
        if($file) {
          fputs($file,"");<"."?php");
          fputs($file,"$name=\"".$_POST['name']."\"");
          fputs($file,"$email=\"".$_POST['email']."\"");
          fputs($file,"$message=\"".$_POST['message']."\"");
          fputs($file,"?".">");
          fclose($file);
        }
      }
    ?>


    Puuuh, das war viel code auf einmal. ;-) :spammer:
    Falls du was nicht verstehst, schreibs einfach =)
    falls du keine große lust hast durch den code durchzusteigen, kann ich verstehen, hatte ich früher auch nicht ;-)
    Trundle
  5. Autor dieses Themas

    s*******i

    easynetpage schrieb:
    hier müsste der Code von easynetpage stehen. Damit der Post nicht zu lang wird, weise ich hier nur darauf hin, dass ihr euch hier den code vorstellen müsst. :biggrin:


    Ach du Himmel.:wow: Das schau ich mir jetzt mal an und versuch das vielleicht in mein Script reinzufriemeln :biggrin:
    So ganz schnall ich das noch nicht:confused:, aber schauen wir mal. Also die Idee versteh ich schon, dass halt nur jemand der die Variablen kennt auf den Text zugreifen kann, und keiner von außen. Nur hab ich bisher noch nichts mit solchen Variablen gemacht :biggrin:
    Bisher hab ich gedacht ich könnte das auch mit ner .htaccess machen, die die Datei text.txt nur für die Dateien des Scripts öffnet, aber anscheinend kann man in der .htaccess keinen Dateien Zugriffsrechte geben :biggrin:

    Edit: Nachdem ich deinen code immer noch nciht anwenden konnte, habe ich jetzt mal versucht die gesamten Dateien mit "md5()" zu verschlüsseln.

    Ich habe die gbk.php so geändert
    <?php
    $daten=$_POST[eintrag]."<br>von <a href=mailto:".$_POST[email].">".$_POST[name]."</a><br><br>";
    $datenbank = "text.txt";
    $datei = fopen($datenbank,"a");
    $crypt = md5("$daten");
    fwrite($datei, "$crypt");
    ?>
    Eintrag erfolgreich.
    <a href="gbook.php">Zum Gästebuch</a>


    Damit sind die Sachen gut verschlüsselt - werden aber auf der gbook.php auch verschlüsselt angezeigt. :biggrin:
    Was muss ich jetzt tun? Ich glaube ich muss in die gbook.php nur eine Zeile code eingeben, mir fällt diese aber gerade nicht ein.
    Vor die Zeile 5 in der gbook.php müsste ein Befehl zum entcrypten des MD5-Textes sein, aber wie lautet der? :confused:

    Beitrag zuletzt geändert: 23.4.2010 17:24:59 von schorschi
  6. aplikon schrieb:
    du kannst ja neben deinem gästebuch auch radiobuttons machen wie sie die seite finden 1 schlecht und 5 gut oder so...
    wär mal ein vorschlag von mir...


    meiner meinung nach absoluter quatsch wen er doch keine datenbank hat/will...sollte sich zumindest nur umständlich realisieren lassen, zumal als anfänger....


    Jetzt habe ich aber das Problem dass die text.txt frei sichtbar ist, owdurch jeder die E-Mail-Adressen der eingetragenen User sehen kann. Das sollte so nicht sein. Wie kann ich die text.txt von außen unsichtbar machen, so dass das Script darauf zugreift, aber nicht jemand von außen? Meine Überlegung war, einfach ein anderes Format für die Datei zu nutzen, aber das kann dann jeder runterladen und mit Notepad öffnen :slant:.

    kann man nicht über chmod die rechte so legen dass es nur vom server aus auslesbar ist???

    greetz
  7. Autor dieses Themas

    s*******i


    kann man nicht über chmod die rechte so legen dass es nur vom server aus auslesbar ist???


    Neind as geht meines Wissens nicht per CHMOD. Leider. Sonst wäre es sooo schön einfach :biggrin:

    Edit: Habe eine Lösung gefunden. es geht per .htaccess.
    Ich habe folgenden Code in die .htaccess eingegeben.
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>


    Das gute ist auch, dass man diesen Code wie es scheint in schon bestehende .htaccess integrieren kann und das Script so nicht extra in einen Unterordner packen muss.

    Damit ist das Problem der lesbaren E-Mails gelöst. Danke für eure Tipps. :thumb: Eine .htaccess lässt sich doch nicht umgehen, oder?
    Wenn ihr noch was zu verbessern findet: immer her damit!

    Wenn jemand sich den Code anschauen will: Ich habe den Code inkl. .htaccess mal zum Download hochgeladen.
    http://download.schorschi.lima-city.de/gbk.zip
    Einfach auf den Webspace laden und es funzt :biggrin:
    (Bisher ist das Script grad mal 2 KB groß :prost:)

    Die Idee mit den Radiobuttons finde ich nice, aber wie soll das ohne Datenbank zufriedenstellend gehen?
    Wenn zuviele Daten in Textdateien abgefragt werden wird das Script auch recht langsam, oder?

    Beitrag zuletzt geändert: 23.4.2010 17:48:56 von schorschi
  8. soweit ich das ganze hier verstanden habe ist noch die frage wie man die Datei text.txt sicher machen kann. Solange man die Datei nicht runterladen kann, müsste es reichen einfach statt .txt eine andre Endung zunehmen wie z.B. .geheim oder so. Dadurch kann sie nicht mehr im Browser gelesen werden
  9. Autor dieses Themas

    s*******i

    hf-bilder schrieb:
    soweit ich das ganze hier verstanden habe ist noch die frage wie man die Datei text.txt sicher machen kann. Solange man die Datei nicht runterladen kann, müsste es reichen einfach statt .txt eine andre Endung zunehmen wie z.B. .geheim oder so. Dadurch kann sie nicht mehr im Browser gelesen werden


    Ich hatte auch mal die Idee, die Datei einfach text.dat zu nennen. Aber dann kann man sie runterladen und per notepad öffnen. Es reicht also nicht. Die Datei wird ja automatisch runtergeladen wenn der Browser sie nicht direkt öffnen kann.

    aber das Problem ist jetzt ja gelöst. :wink:
  10. Um zu verhindern, dass Dateien innerhalb eines Ordners von außen geöffnet oder gar heruntergerladen werden können, muss in dem Ordner mit den zu schützenden Dateien eine .htaccess Datei mit folgendem Inhalt erstellt werden:

    AuthUserFile /dev/null
    AuthGroupFile /dev/null
    AuthName DenyViaWeb
    AuthType Basic
    
    order allow,deny
    deny from all


    Ich persönlich frage mich jedoch, wieso du nicht einfach MySQL verwendest, was

    1. einfacher
    2. sicherer
    3. schneller
    4. effizienter

    wäre. SQL existiert schon seit 1975 und die Leute haben sogar noch im 20. Jahrhundert in Textdateien geschrieben. Ich kenne nichts schlimmeres ;)

    Beitrag zuletzt geändert: 23.4.2010 19:21:52 von fabo
  11. Autor dieses Themas

    s*******i

    fabo schrieb:
    Um zu verhindern, dass Dateien innerhalb eines Ordners von außen geöffnet oder gar heruntergerladen werden können, muss in dem Ordner mit den zu schützenden Dateien eine .htaccess Datei mit folgendem Inhalt erstellt werden:

    AuthUserFile /dev/null
    AuthGroupFile /dev/null
    AuthName DenyViaWeb
    AuthType Basic
    
    order allow,deny
    deny from all


    Ich persönlich frage mich jedoch, wieso du nicht einfach MySQL verwendest, was

    1. einfacher
    2. sicherer
    3. schneller
    4. effizienter

    wäre. SQL existiert schon seit 1975 und die Leute haben sogar noch im 20. Jahrhundert in Textdateien geschrieben. Ich kenne nichts schlimmeres ;)


    Danke, aber ich habe .htaccess schon angepasst.

    Und NEIN, ich nehme kein MySQL. Erstens ist das weiterer Programmeiraufwand und zweitens will ich einfach nciht für jeden Pups MySQL-DBs nutzen müssen.
  12. Dann ist der Thementitel falsch ;) Denn es war ja die Frage, was man verbessern kann und ich persönlich finde, dass das Nutzen von Textdateien als Datenbankersatz ein Schritt in die falsche Richtung ist.

    Aber hey... Es ist dein Gästebuch und du kannst damit tun und lassen, was du möchtest ;) Ist halt nur meine persönliche Meinung, also mach dir nichts draus.
  13. Autor dieses Themas

    s*******i

    fabo schrieb:
    Dann ist der Thementitel falsch ;) Denn es war ja die Frage, was man verbessern kann und ich persönlich finde, dass das Nutzen von Textdateien als Datenbankersatz ein Schritt in die falsche Richtung ist.

    Aber hey... Es ist dein Gästebuch und du kannst damit tun und lassen, was du möchtest ;) Ist halt nur meine persönliche Meinung, also mach dir nichts draus.


    Kein Problem.
    Hab dafür ein neues. Irgendein Witzbold hat einen Eintrag in meinem GB geschrieben das auf eine Javascript-Datei verlinkt und will mir weismachen, meine Seite wäre gehackt.

    Das ist der Beitrag
    This is remote text via xss.js located at ha.ckers.org aduser=5247bfb410cef85812480fb43511910c; __utmz=181192506.1272036646.147.16.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=md5%20entschl%C3%BCsseln%20script; __utma=181192506.321342006.1267345657.1272036606.1272043754.148; __utmc=181192506; __utmb=181192506.10.10.1272043754


    Was soll der Mist? Also wirklich, da hat wohl ein kleines Kiddie nichts zu tun! :sauer:

    Hier ein Bild http://j.imagehost.org/download/0881/lol_2
  14. Guten Abend zusammen,
    Gästebücher auf "Text-Basis" laufen zu lassen - davon halte ich nicht viel.
    Man sollte nicht von Datenbanken abweichen.
    Angaben, die von einem x-beliebigen Benutzer stammen, sollten nicht auf den Server kommen.
    Außerdem ist die Handhabung mit einer Datenbank eine ganz andere.

    Zu deinem Skript:
    Ich sehe sehr viele Sicherheitslücken, die jedem das "hacken" schmackhaft machen.

    Ich verstehe deine Gründe gegen SQL-Datenbanken nicht.
    Diese sind auf jedem OS lauffähig, schnell und zuverlässig.

    Ich würde es als heutigen Standard bezeichnen für dynamisch erzeugte Webseiten mit Angaben von Benutzern eine Datenbank einzusetzen.

    Auch wenn es nur ein "kleines Gästebuch" sein soll - ob du Textdateien oder eine Datenbank als Backend nutzt spielt vom programmiertechnischen Aufwand kaum eine Rolle.
    Mehr Quelltext ist in diesem Fall gut, weil einige Einschränkungen vorhanden sind (z.B. die Anzeige der Einträge).

    Abschließend rate ich dir ausdrücklich eine Datenbank zu nutzen.
    Außerdem solltest du dir mal gründlich alle Arten von Sicherheitslücken in PHP-Skripten ansehen - ich sehe nämlich echt einige.

    Schönen Abend vollends!

    Gruß,
    dex

    Beitrag zuletzt geändert: 23.4.2010 20:36:37 von qap2
  15. Das das passiert, war klar. Ich war's selbstverständlich nicht, aber wenn ein Beitrag 1:1 in eine Textdatei geschrieben und am Ende ausgegeben wird, hätte irgendjemand dein Gästebuch sowieso "gehackt". Vielleicht sogar, ohne es zu wollen.

    $eintrag = preg_replace ( '/[^a-z0-9,.-_ ]/i', '', $_POST[eintrag]); 
    $email = strip_tags($_POST[email])
    $name = preg_replace ( '/[^a-z ]/i', '', $_POST[name]); 
    
    $daten=$eintrag."<br>von <a href=mailto:".$email.">".$name."</a><br><br>";


    Mal so als Beispiel, was man machen KÖNNTE. Bei sowas muss man auf jeden Fall immer die Eingaben des Benutzers prüfen, ggf. formatieren und dann erst speichern.
  16. Autor dieses Themas

    s*******i

    fabo schrieb:
    Das das passiert, war klar. Ich war's selbstverständlich nicht, aber wenn ein Beitrag 1:1 in eine Textdatei geschrieben und am Ende ausgegeben wird, hätte irgendjemand dein Gästebuch sowieso "gehackt". Vielleicht sogar, ohne es zu wollen.

    $eintrag = preg_replace ( '/[^a-z0-9,.-_ ]/i', '', $_POST[eintrag]); 
    $email = strip_tags($_POST[email])
    $name = preg_replace ( '/[^a-z ]/i', '', $_POST[name]); 
    
    $daten=$eintrag."<br>von <a href=mailto:".$email.">".$name."</a><br><br>";


    Mal so als Beispiel, was man machen KÖNNTE. Bei sowas muss man auf jeden Fall immer die Eingaben des Benutzers prüfen, ggf. formatieren und dann erst speichern.


    Hm. Gibt es eine Möglichkeit z.b. die eingabe von HTML-,PHP- und Javascript-Code zu verweigern? Das würde es richten.
    Ich selber werde morgen daran weitertüfteln. Für heute ist genug. Solange nehme ich das GB vom Netz, sonst kommen noch mehr auf falsche Ideen.

    @qap2: Warum versteht hier keiner, dass ich es doch nur als Übung zum php-lernen erzeuge :biggrin: Jeder fängt klein an.
    Wenn ich etwas für den produktiven Einsatz machen würde, würde ich ein Blog-CMS erstellen, dass den Blog in Forum eines 3D-Würfels darstellt - von allem anderen gibt es genug.:blah:
    Ich habe es nur hochgeladen, falls vielleicht jemand mir jemand bessere Tipps geben kann wenn er es sich live ansieht.
    Das jemand es für nötig erachtet das Test-GB zu hacken halte ich für lächerlich und peinlich. Hat dieser Scherzkeks so wenig zu tun?

    Beitrag zuletzt geändert: 23.4.2010 20:46:48 von schorschi
  17. Durch strip_tags() hast du schon den Großteil an Javascript und HTML aus den einzelnen Parametern entfernt. Einen 100%igen Schutz vor XSS gibt es eigentlich kaum.

    Ein Gästebuch auf MySQL Basis kann sog. "Prepared Statements" verwenden, um so etwas zu unterbinden.
  18. Autor dieses Themas

    s*******i

    fabo schrieb:
    Durch strip_tags() hast du schon den Großteil an Javascript und HTML aus den einzelnen Parametern entfernt. Einen 100%igen Schutz vor XSS gibt es eigentlich kaum.

    Ein Gästebuch auf MySQL Basis kann sog. "Prepared Statements" verwenden, um so etwas zu unterbinden.


    Wie meinst du das mit strip_tags()? Könntest du mir bitte ein kleines Codebeispiel ihrer Anwendung geben?
  19. Ist ganz einfach:

    strip_tags($str)

    Diese Funktion versucht, einen String zurückzugeben, der die um alle HTML- und PHP-Tags reduzierte Version von str darstellt.
  20. Autor dieses Themas

    s*******i

    fabo schrieb:
    Ist ganz einfach:

    strip_tags($str)

    Diese Funktion versucht, einen String zurückzugeben, der die um alle HTML- und PHP-Tags reduzierte Version von str darstellt.


    Danke.
    Schau ich mir mal an. Kann man es auch so einstellen, das die Tags für Bold, Italic und Underlined noch erhalten bleiben?
  21. Da würde ich kein HTML für verwenden, sondern richtige BBCodes.
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!