Andreas: Der Gästebuchterminator

Hallo,
ich habe in diesem Forum Hilfe gesucht, und den Link auf ein Gästebuch, an dem ich grad arbeite, gesetzt.

Kurz darauf habe ich das Gästebuch geladen, und mein Entsetzten war Groß. Große grüne Kreise zierten meine Seite über mehrere Seiten hinweg. Alles war verschoben. Um den vorherigen Stand wos funktionierte herzustellen, fing ich an, letzte Änderungen schrittweise zu löschen.

Die Lösung ist so kriminell wie trivial:
irgendjemand, der sich "Der Gästebuchterminator" nennt hat mein Gästebuch sabotiert.

Folgendes hat er u.a. eingetragen:
unter url:
"><style type="text/css">td {border:5cm dotted green}</style><x "
unter message:
<script type="text/javascript">for (var i=0;i<3;i++) alert("Tralala, zum "+i+".!");</style>

Zum einen ärgere ich maßlos, da viele Stunden Arbeit weg sind, andererseits bin ich besorgt, dass das öfters passiert.

Daher meine Fragen:
1. wie kann ich sowas verhindern?
2. welcher Ar... war das?

Gruß Andreas

PS: IP gespeichert

  1. Hallo,

    hallo

    Die Lösung ist so kriminell wie trivial:
    irgendjemand, der sich "Der Gästebuchterminator" nennt hat mein Gästebuch sabotiert.

    Folgendes hat er u.a. eingetragen:
    unter url:
    "><style type="text/css">td {border:5cm dotted green}</style><x "
    unter message:
    <script type="text/javascript">for (var i=0;i<3;i++) alert("Tralala, zum "+i+".!");</style>

    ich finds lustig ^^

    Zum einen ärgere ich maßlos, da viele Stunden Arbeit weg sind, andererseits bin ich besorgt, dass das öfters passiert.

    und drittens solltest du glücklich darüber sein, dass nichts schlimmes passiert ist. so würde dir auf eine mehr oder weniger sanfte art mitgeteilt, dass dein gästebuch noch einige sicherheitslücken hat.

    Daher meine Fragen:

    1. wie kann ich sowas verhindern?

    niemals aber auch niemals irgendwelche eingaben als html oder sonstwas ausgeben lassen ...

    1. welcher Ar... war das?

    ich glaube nicht, dass er/sie sich meldet

    Gruß Andreas

    cu
    ulli

    PS: IP gespeichert

    wird dir leider nichts nützen

  2. hi,

    Die Lösung ist so kriminell wie trivial:
    irgendjemand, der sich "Der Gästebuchterminator" nennt hat mein Gästebuch sabotiert.

    Folgendes hat er u.a. eingetragen:
    unter url:
    "><style type="text/css">td {border:5cm dotted green}</style><x "
    unter message:
    <script type="text/javascript">for (var i=0;i<3;i++) alert("Tralala, zum "+i+".!");</style>

    was soll daran kriminell sein?
    er hat lediglich ascii-zeichen eingegeben; da du nicht verhindert hast, dass diese als html/js-code interpretiert werden, sehe ich die schuld eindeutig bei dir.

    Zum einen ärgere ich maßlos, da viele Stunden Arbeit weg sind,

    wieso das denn? du brauchst doch nur die betreffenden einträge wieder löschen.

    Daher meine Fragen:

    1. wie kann ich sowas verhindern?

    du machst keine angaben, auf welcher technik dein GB aufsetzt.
    grundsätzlich wäre es schon mal eine gute idee, < und > durch ihre html-entsprechungen < und > zu ersetzen - damit ist die ausführung/interpretation von html und javascript schon unmöglich gemacht.
    php bietet dafür z.b. die funktion htmlspecialchars() an.

    1. welcher Ar... war das?

    jemand, der dir mitteilen wollte, dass du zu naiv und unvorsichtig warst, nehme ich an.
    sei froh, dass du dir dessen jetzt bewusst bist und abhilfe schaffen kannst, bevor ggf. schlimmeres passiert ist.

    gruss,
    wahsaga

    1. Hallo,
      danke für die Info.
      Ich bin ja noch gar nicht fertig mit dem G-Book.
      Wenn das mit der DB funktioniert kommen die sessions dran, so dass innerhalb einer session nur einmal gepostet werden kann, um z.B. spam abzuwehren.
      Das mit dem konvertieren von <> finde ich eine gute Idee.

      Gruß Andreas

    2. Hallo,
      habe soweit alles wieder hergestellt, und folgende funktion eingebaut:

      function encode($var){
      $var = str_replace("<","<",$var);
      $var = str_replace(">",">",$var);
      $var = str_replace("\r","",$var);
      $var = str_replace("\n","<br>",$var);
      return $var;}

      Vor dem speichern in der DB wird die Message folgendermaßen bearbeitet:
      $form_message = encode(trim(chop(addslashes($HTTP_POST_VARS['form_message']))));

      Scheint zu funktionieren.
      werde das noch auf die anderen Felder erweitern.

      Gruß Andreas

      PS: falls der Ar... das liest, wäre nett wenn er sich nochmals kreativ versuchen würde.

    3. Hi nochmal,
      danke für den Test.
      was meint ihr, macht es sinn die mehrfacheingabe über sessions zu verhindern?

      Gruß Andreas

      1. Holladiewaldfee,

        was meint ihr, macht es sinn die mehrfacheingabe über sessions zu verhindern?

        Nein. Eine Session ist nur solange sinnvoll, wie ich Dir mitteile, daß ich zu dieser Session gehöre. Sprich: Wenn mein Browser kein Identifikationsmerkmal mitschickt, in dem die SessionID enthalten ist (Cookie oder Querystring), dann kannst Du nicht 100%ig ermitteln, ob ich schon eine Session habe oder nicht. Damit ist der Schutz hinfällig.

        Ciao,

        Harry

        --
          Intelligenz ist nicht zwingend etwas positives.
          Man weiß erst, was man hatte, wenn man es verloren hat.
        1. hallo Harry,

          Nein. Eine Session ist nur solange sinnvoll, wie ich Dir mitteile, daß ich zu dieser Session gehöre. Sprich: Wenn mein Browser kein Identifikationsmerkmal mitschickt, in dem die SessionID enthalten ist (Cookie oder Querystring), dann kannst Du nicht 100%ig ermitteln, ob ich schon eine Session habe oder nicht. Damit ist der Schutz hinfällig.

          köntest du trotzdem mal testen obs bei mir funzt?
          einfach 2x versuchen einen Eintrag zu posten.
          siehe Link unten.
          Gruß Andreas

          1. Holladiewaldfee,

            köntest du trotzdem mal testen obs bei mir funzt?

            Jetzt geht gar nix mehr, ich darf nicht mal mehr die Seite aufrufen:
            "Wegen Schutz vor Spamming können Sie keine weiteren Einträge machen"

            Und das wo ich mir doch nur die bisherigen Einträge ansehen wollte.

            Ciao,

            Harry

            --
              Intelligenz ist nicht zwingend etwas positives.
              Man weiß erst, was man hatte, wenn man es verloren hat.
            1. Hallo,

              Jetzt geht gar nix mehr, ich darf nicht mal mehr die Seite

              das hab ich mir fast schon gedacht.

              So sieht mein Code aus:
              ...
              session_start();
              $SESSIONID = SID;
              ...
                if ( getenv("REQUEST_METHOD") == "POST" ){
                $what = $HTTP_POST_VARS['what'];
                $PHPSESSID = $HTTP_POST_VARS['PHPSESSID'];
                }
                if ( isset($HTTP_COOKIE_VARS['PHPSESSID']) )
                $PHPSESSID = $HTTP_COOKIE_VARS['PHPSESSID'];
              ...
                if ( $spamprotect == 1 ){
                $ip = getenv("REMOTE_ADDR");
                $sql = mysql("$DBname","SELECT COUNT(id) FROM $sqltbl WHERE ipaddr = '$ip'");
                  if ( mysql_numrows($sql) >= 1 )
                  die("<br><br>   Wegen Schutz vor Spamming können Sie keine weiteren Einträge machen<br><br><br>");
                }

              Muss jetzt erstmal schauen woran es liegt.
              Gruß Andreas

              1. Hallo,
                obwohl ich die Datenbank geleert habe, zeigt mysql_numrows($sql) als Ergebnis 1 an:

                $ip = getenv("REMOTE_ADDR");
                $sql = mysql("$DBname","SELECT COUNT(id) FROM $sqltbl WHERE ipaddr = '$ip'");
                if ( mysql_numrows($sql) >= 1 )
                die("<br><br>   Wegen Schutz vor Spamming können Sie keine weiteren Einträge machen<br><br><br>");

                Ist das Normal?

                Gruß Andreas

                1. Hi,
                  nun zum hoffentlich letzten male zu diesem Thread.
                  Ich bin zwar noch etwas unbedarft in der Materie, aber ich habe den Fehler Gefunden.
                  Anstatt "SELECT Count(id) FROM $sqltbl" muss ich "SELECT id FROM $sqltbl" schreiben.

                  Gruß und Dank an alle.
                  Andreas

    4. Hallo Andreas,

      schau nochmal unter

      htmlspecialchars()
      htmlentities()

      nach Gruesse Dacor

      1. Hallo,
        worauf beziehst du dich? Auf das Abfangen der HTML-Tags oder der Session? Denn ersteres hab ich ja erledigt.

        htmlspecialchars()
        htmlentities()

        Gruß Andreas

        1. Hallo Andreas,

          worauf beziehst du dich? Auf das Abfangen der HTML-Tags oder der Session? Denn ersteres hab ich ja erledigt.

          htmlspecialchars()
          htmlentities()

          schon noch auf das Abfangen, dass ist mit htmlspecialchars
          viel eleganter.

          Viele Gruesse

  3. Hallo,

    naja, abgesehen davon, das Du es ja mittlerweile gelassener siehst und es auch in "Produktivität" umgesetzt hast, gebe ich Dir recht (der Gästebuchterminator kennts ja schon von mir ;-)): ich finde diesen Stil auch nicht so gut. Wenn man sieht, das eine Sicherung übersehen wurde, dann kann man das ja auch erst einmal äußern und dann sich immer noch überlegen, nach net Woche noch mal vorbei zu schauen. (nur, damit es jetzt nicht so aussieht, als ob alle der gleichen Meinung wie der terminator, übrigens ein ganz friedliebender Kerl, sind....)

    Chräcker

    1. Hallo Chräcker,
      danke für dir Antwort.

      friedliebender Kerl, sind....

      naja, wenigstens hat er Humor wie ich an seinen grünen Kreisen sah.

      Aber nochmal zur letzten Frage von mir: wie siehst du es mit der session um spam abzublocken?
      Sinn oder wenig wirksam?

      Gruß Andreas

      1. Hallo,

        wie siehst du es mit der session um spam abzublocken?

        hüstel, ich habe (ehrlich) keine Ahnung davon ;-) ich klebe da immer nur Fertigscripte zusammen und schalte vor meinem Gästebuch eine ganze Reihe von Seiten zur Filterung der Besucherströme.... wer solange bei mir durchhält und auf der Seite bleibt ist meistens friedliebend....

        Chräcker

        1. Hallo Chräcker,

          wie siehst du es mit der session um spam abzublocken?

          Keine Chance. Entferne oder deaktiviere vom Benutzer eingegebenen HTML-Code.
          Stichworte: htmlentities() und striptags()

          hüstel, ich habe (ehrlich) keine Ahnung davon ;-) ich klebe da immer nur Fertigscripte zusammen und schalte vor meinem Gästebuch eine ganze Reihe von Seiten zur Filterung der Besucherströme.... wer solange bei mir durchhält und auf der Seite bleibt ist meistens friedliebend....

          Sind sie. Ich war heute mal wieder da ;-)

          Und erzähl nicht, du hast keine Ahnung, diese Art Spamfilter ist die allerbeste.

          (Warum ich da war: Auch, weil ich Screenshots der Stempelseite für meine Link-Sektion brauchte. Hab dir ja schon länger erzählt, dass du mal drüberschauen solltest, aber ich werde einfach nicht fertig damit ;-))

          Grüße aus Barsinghausen,
          Fabian

    2. Moin!

      Wenn man sieht, das eine Sicherung übersehen wurde, dann kann man das ja auch erst einmal äußern und dann sich immer noch überlegen, nach net Woche noch mal vorbei zu schauen. (nur, damit es jetzt nicht so aussieht, als ob alle der gleichen Meinung wie der terminator, übrigens ein ganz friedliebender Kerl, sind....)

      Das Problem ist: Wenn man keinen Quellcode hat, dann kann man die Anfälligkeit des Gästebuchs für HTML- und Javascriptcode nur durch Ausprobieren feststellen. Und dann hab ich absolut nichts dagegen, die Angreifbarkeit durchaus etwas illustriert darzustellen.

      - Sven Rautenberg

      --
      SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
      ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
      1. Hallo,

        da gebe ich Dir recht. Dann würde ich, das wäre eben mein Verständnis von Hilfe, gleichzeitig eine Problemerklärende Mail hinterher schicken.

        Jemanden nur in eine Falle laufen lassen ohne wenigstens grundsätzliche Infos zu geben wäre, sagen wir mal, nicht mein "Stil". Nicht jeder schaft es, so wie Andreas, die "Energie des Ärgerns" und der Verwirrung sofort in eine in die richtige Richtung gehende Problemlösung um zu setzen.

        Chräcker

  4. Hallo,
    könnte jemand mal testen ob das mit dem Spam-schutz durch die SessionID klappt?
    hier der Link:
    http://www.access-o-mania.de/guestbook/gbook.php

    Gruß Andreas