kostenloser Webspace werbefrei: lima-city


Spamschutz

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    finch

    Kostenloser Webspace von finch, auf Homepage erstellen warten

    finch hat kostenlosen Webspace.

    Hallo,

    ich bin grad dabei mein Gästebuch möglichst sicher zu machen. Hab mich jetzt für die Methode \"2 Zahlen addieren\" entschieden. Funzt auch net schlecht doch hab ich ein tag/problem">Problem: wenn man auf zurück klickt sind alle Felder noch ausgefüllt und wenn man dann auf abschicken klickt, wird der selbe Eintrag nochmal ausgeführt und das kann man immer wiederholen...

    Jetzt hab ich bissi auf anderen Seiten rumgschaut und viele haben das so gelöst das bei zurück die Meldung \"Diese Seite ist nicht mehr gültig\" kommt, wie macht man das??
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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


  3. Jetzt hab ich bissi auf anderen Seiten rumgschaut und viele haben das so gelöst das bei zurück die Meldung \\\'Diese Seite ist nicht mehr gültig\\\' kommt, wie macht man das??


    Das hab ich jetzt net verstanden, wann das kommt.

    Was anderes: Ist dir Bekannt, dass du POST und SESSION Variablen mit unset() löschen kann?

    unset($SESSION[\'text\']);


    Vielleicht hilft das.
  4. Ich schätze mal, dass es sich bei seinem Problem um ein Browser-Problem handelt: Firefox Beispielsweise speichert den inhalt von Input-Feldern, so dass, wenn man den \"Zurück-Button\" benutzt Felder wie z.b. in seinem Fall die Code-Überprüfung immer wieder ausgefüllt wird und somit zu \"Spam\" missbraucht werden kann.

    So habe ich das Problem zumindest verstanden.

    Als Lösung würde ich vorschlagen in die Session zu speichern, ob der Beitrag bereits gesendet wurde. Also ein bspsw.
    $_SESSION[\'foo\'] = \"initialisiert\";
    auf die Formular-Seite, auf der \"Gesendet-Seite\" dann ein
    if($_SESSION[\'foo\']==\"initialisiert\")
    {
    $_SESSION[\'foo\'] = \"gesendet!\";
    // ...
    }


    ... oder ähnlich halt. Ist sicher nicht die eleganteste Methode, aber funktioniert sicher irgendwie ;)


    Beitrag geändert: 6.6.2008 10:46:27 von nerdinator
  5. Autor dieses Themas

    finch

    Kostenloser Webspace von finch, auf Homepage erstellen warten

    finch hat kostenlosen Webspace.

    zurüksetzen der Variablen bringt nichts, bei den Button zurück! Zurück beteutet ja: Inhalt von der vorigen Seite wieder anzeigen...

    Ich glaub ich werd ein Popup fürs eintragen verwenden und dieses schließe ich nach erfolgreichen eintragen.

    Wie schützt ihr euch vor Spam?

  6. Ich glaub ich werd ein Popup fürs eintragen verwenden und dieses schließe ich nach erfolgreichen eintragen.


    Hm, das schließen würde dann per Java-Sctipt gehen, oder? Wenn man also Java-script deaktiviert hat, funktioniert das alles nicht mehr? Ich weiß ja nicht, ob das so Sinnvoll ist.

    Wie schon gesagt: Entweder du machst eine Gültigkeits-Überprüfung, indem du ein Prüf-Tag setzt, oder vielleicht noch besser: Du speicherst die jeweiligen Summanden in der Session speicherst und sobald sie überprüft wurden \"unset\"est ;)

    So muss die Seite erst wieder refreshed werden - und damit der gesamte php-Code neu ausgeführt werden (heißt: neue Summanden) - damit wieder ein Beitrag erstellt werden kann.

    Des weiteren würde ich eine \"IP-Sperre\" einbauen, damit nicht in kurzer Zeit 2 Beiträge von der selben IP hintereinander erstellt werden können.

    Ausserdem kannst du einbauen, dass gleiche oder ähnliche Beiträge nicht angezeigt werden, oder erst durch den Administrator frei gegeben werden müssen, um angezeigt zu werden.

    Aber letztendlich ist nichts 100%ig sicher, würde ich sagen. Spam wird es immer geben, solang es kommerzielle Angebote gibt ;)
  7. Autor dieses Themas

    finch

    Kostenloser Webspace von finch, auf Homepage erstellen warten

    finch hat kostenlosen Webspace.

    Stimmt JS lässt sich ausschalten, aber bei einem Popup gibts kein zurück, oO gibts doch mit rechter maustaste.
    An was man da alles denken muss. :confused:
    Aber ich werd mal das mit der Gültigkeits-Überprüfung einbaun und testen.

    Bei der IP-Sperre reicht es eh wenn ich die IP des letzten eintrags mit der aktuellen vergleiche.

    Des weiteren hab ich mir gedacht lass ich nur 20 Einträge am Tag zu.
  8. oxfordgitarre

    oxfordgitarre hat kostenlosen Webspace.

    Ich habe zum Thema Spamschutz auch eine Frage:
    Bei mir kann man einen Eintrag schreiben indem man einfach ein Formular ausfüllt und dieses dann an die gleiche Seite gesendet wird und der Inhalt dann gleich in der DB gespeichert wird.
    Wenn man jetzt also auf Refresh klickt werden die POST Daten nochmal gesendet und der selbe Eintrag ist nochmal vorhanden.

    Kann man das irgendwie ohne großen MYSQL aufwand, am besten gar keinen, lösen?
  9. m******s

    Hm, vielleicht, die Daten über ein zweites php-Skript speichern lasen, welches dann per header auf das alte verweist?

  10. Ich habe zum Thema Spamschutz auch eine Frage:
    Bei mir kann man einen Eintrag schreiben indem man einfach ein Formular ausfüllt und dieses dann an die gleiche Seite gesendet wird und der Inhalt dann gleich in der DB gespeichert wird.
    Wenn man jetzt also auf Refresh klickt werden die POST Daten nochmal gesendet und der selbe Eintrag ist nochmal vorhanden.

    Kann man das irgendwie ohne großen MYSQL aufwand, am besten gar keinen, lösen?


    Das könnte man entweder per Cookie machen, der, wenn er gesetzt ist, einfach das Absenden verhindert, oder aber per Sessions, was vielleicht einfacher ist. Sobald der Beitrag gesendet wird, prüfst du auf eine Sessionvariable, zB $_SESSION[\'eintrag\']==\'gesendet\' und wenn diese existiert, dann wird der Eintrag kein zweites Mal in die DB geschrieben, wenn die Session nicht vorhanden ist, Eintrag schreiben und Sessionvariable belegen.
  11. oxfordgitarre

    oxfordgitarre hat kostenlosen Webspace.

    @merovius:
    Ich verstehe deinen Vorschlag leider nicht. Vielleicht könntest du ihn genauer erklären.

    @tct
    Diese Session Methode würde gut gehen, wenn man von der Sendenen Seite auf eine Seite kommt mit \"Eintrag gesendet\", aber bei mir geht das leider nicht.
    Wenn aber das Schreiben und Senden auf einer Seite verläuft, ist das ganze etwas schwieriger. Man könnte es zwar auch machen, aber wenn jetzt jemand einen Beitrag sendet, dann nochmal einen schreibt und diesen auch sendet wird auch das verhindert.

    Mir fällt schon eine Lösung ein, aber die ist mit MYSQL und das würde ich mir geren sparen.
  12. m******s

    Okay, du hast nun eine PHP-Datei (ich nenn sie mal gb.php), wo ein formular ist

    <form name=gb\" target=\"gb.php\" method=\"POST\">
    <input name=\"eintrag\">
    [...]
    </form>

    (weiß die genaue HTML-Syntax nicht aussm Kopf, aber ist ja auch nur symbolisch) und dann steht oben PHP-Code:

    <?PHP
    if(isset($_POST[\'eintrag\']))
    {
    [... (Verschiedene PHP-Anweisungen um den Eintrag zu speichern) ... ]
    }
    ?>

    Oder etwas in der Richtung. Mein Vorschlag (IMHO der einfachste) ist se, eine zweite PHP-Datei anzulegen, nennen wir sie \"submit.php\", in der dann steht:

    <?PHP
    if(isset($_POST[\'eintrag\']))
    {
    [... (Verschiedene PHP-Anweisungen um den Eintrag zu speichern) ... ]
    header(\"Location: http://www.deinserver.de/gb.php\" ) ;
    }
    ?>

    Und du änderst deine gb.php, indem du den PHP-Code zum Speichern rausnimmst und das Formular änderst:

    <form name=\"gb\" target=\"submit.php\" method=\"POST\">
    <input name=\"eintrag\">
    [...]
    </form>

    Auf die Art und Weise werden die Formulardaten an submit.php gesendet. Der pspeichert dann den Gästebucheintrag und leitet danach automatisch um zurück zur Gästebuch-Seite.
    Die enthält aber keinen Code zum speichern des Gästebucheintrages mehr, wenn also F5 gedrückt wird, wird auch nix neues gespeichert.

    Um meinen Vorschlag umzusetzen brauchst du also nur ein bisschen PHP-Code aus der einen Datei auszuschneiden, in eine neue Datei einfügen und zwei Zeilen Code zu ändern. Für den Besucher ändert sich überhaupt nichts und die gesamte Seitenmechanik bleibt gleich.


    Beitrag geändert: 12.6.2008 12:05:45 von merovius
  13. oxfordgitarre

    oxfordgitarre hat kostenlosen Webspace.

    Danke merovius das hat mir echt weitergeholfen. Leider kann man jetzt mehrere Kommentare senden indem man ganz oft auch den senden-Button klickt, aber das krieg ich auch noch hin.
  14. Also ich habe es so gemacht, dass ich überprüfe, ob der Beitrag, der gerade abgeschickt wurde, ident mit dem Beitrag ist, der als letzter in der DB eingetragen ist.

    Funktioniert eigentlich recht gut.


    lg
    Vali

  15. Also ich habe es so gemacht, dass ich überprüfe, ob der Beitrag, der gerade abgeschickt wurde, ident mit dem Beitrag ist, der als letzter in der DB eingetragen ist.

    Funktioniert eigentlich recht gut.


    lg
    Vali

    Genau das ist die beste Lösung, aber der Fragensteller wollte ja wissen:
    Kann man das irgendwie ohne großen MYSQL aufwand, am besten gar keinen, lösen?

    Daher sind hier Vorschläge ohne MySQL. Allerdings ist das wirklich die einfachste und auch \"sicherste\" Lösung, um keine doppelten Beiträge zu bekommen. Kombiniert mit einer IP-Sperre oder einem Captcha sollte das dann schon passen.
  16. m******s


    Danke merovius das hat mir echt weitergeholfen. Leider kann man jetzt mehrere Kommentare senden indem man ganz oft auch den senden-Button klickt, aber das krieg ich auch noch hin.


    Deaktiviere den Senden-Button doch nach einmaligem anklicken mithilfe von Javascript. Dazu den Button-type auf \"button\" (glaub ich) setzen, und dazuschrieben
    onClick=\"javascript:submitform()\" name=\"submitbutton\"
    oder so eingeben (Syntaxfehler kann vielleicht jemand überüfen, der das öfters macht, ich will wieder nur die Idee vermitteln).
    Oben in der Seite fügst du dann ein script ein:
    <script language=\"javascript\">
    function submitform()
    {
    document.getelementbyid(\"submitbutton\").disabled=true;
    document.getelementbyid(\"gbform\").submit();
    }
    </script>

    (bei \"gbform\" kommt halt der Formularname rein)
    Auf die Art und Weise kann nach einmaligem Klick der Button nicht mehr betätigt werden.
  17. oxfordgitarre

    oxfordgitarre hat kostenlosen Webspace.

    Also jetzt kann ich endlich wieder antworten. Die Zeit vergeht manchmal genz schön schnell und ich wollte erst antworten, wenn alles auf Herz und Niere geprüft ist. Danke für die Tipps.
    @tct
    Ohne SQL wärs am besten gewesen, aber letztendlich hab ich auch gemerkt, dass es ohne nicht geht.
    Das Problem war nur, dass bei mir der Name oder die BenutzerID, wenn der Benutzer angemeldet ist und der Text gespeichert wird. schauen, ob dieser Text schonmal gesendet wurde, indem man alle Beiträge nach dem gleichen Text durchsucht, find ich schlecht, da ich mir nicht vorstellen kann, dass das sehr Performence freundlich ist. Auch über ide EintragsID ging es nicht, da die EintragsID wird von der Datenbank automatisch eingefügt. Also konnte ich die doppelten Einträge nicht anhand der doppelt versendeten ID identifizieren. Außerdem wüsste ich nicht, wie das gescheit funktionieren soll, da selbst wenn ich die ID über php einfüge, müsste ich ja vorher abfragen, was die letzte ID war, dann in einem versteckten Feld die nächste ID mitschicken. Aber wenn jetzt zwei Leute einen Eintrag glcihzeitig schreiben, dann wird der eine blockiert.
    Jetzt kann man sagen: Aber was passiert wenn jemand seine Cookies deaktiviert hat und somit keine Session. Erstens könnte man statt der session_id die ip Adresse speichern und zwitens kann man bei mir nur einfach so Nachrichten verschicken, wenn man angemeldet ist. Sobald man aber nicht angemeldet ist, muss man sowieso ein Captcha (reCaptcha.net finde ich sehr gut und sicher) ausfüllen.
    Ich habs jetzt so gelöst: Jedesmal wenn man einen Beitrag schreiben will, wird in einem verstckten Feld das datum gespeichert, wann die Seite aufgerufen wurde. Nach dem Versenden der Nachricht, wird dann in einer Tabelle das datum + die session_id gespeichert. Wenn man jetzt nochmal auf senden drückt, dann wird das gleiche Datum wieder gesendet und dann wird der Beitrag blockiert.
    Puh! Das war viel Text, der viellciht etwas verwirrend ist und den sich niemand durchlist
    An sich finde ich, dass das nicht viel SQL aufwand ist.
    Also nochmals danke für die Hilfen.
    Besonders an merovius,
    dass das Weiterleiten von einer Seite hätte ich sonst erst irgendwann erfahren.
  18. m******s

    Hm, finde deine Lösung ehrlich gesagt unelegant, nur ein Beitrag pro Tag würde mir auch nicht passen..... hast du das mal ausprobiert mit dem Button deaktivieren? ;)
  19. oxfordgitarre

    oxfordgitarre hat kostenlosen Webspace.

    Ne, das hab ich noch nicht, aber das ist auch zu einfach zu knacken, wenn man javascript deaktiviert.
    Vielleicht habe ich mich mit Datum falsch ausgedrückt. Ich meite mit Datum alles auch die sekunde. D.h. 1 Beitrag pro Sekunde.

    Edit: Grammatik Fehler


    Beitrag geändert: 18.6.2008 13:12:41 von oxfordgitarre
  20. m******s

    Also, erstmal, zu knacken ist alles. ;) Aber Javascript deaktivieren hilft da nichts, denn ohne javascript würde das Formular auch nicht abgeschickt werden (du erinnerst dich? Die submit()-Funktion wird über javascript aufgerufen, der Button ist ohne Javascript Wirkungslos). Aber im Endeffekt funktioniert auch, was du gemacht hat, und die Einzelheiten sind Geschmackssache ;)
  21. 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!