[PHP] Spamsperre

Imperator

gehört zum Inventar
Spamsperre

Hi,

ich bin im moment mit einem Freund eine Seite am machen.
Jetzt steh ich allerdings ein bisschen arg auf dem Schlauch^^
Wir haben da ein Gästebuchsystem (jeder User bekommt ein GB)
naja auf jeden fall wollte ich da eine einfache und schnelle Spamsperre einbauen aber irgendwie fehlt mir der ansatz zur lösung :unsure:s
 

Imperator

gehört zum Inventar
Ehm sorry vll falsch ausgedrück^^

wollte so ne art reloadsperre
Sprich wenn jemand einen eintrag in einem GB eines Users gemacht hat soll er die nächsten x sekunden nicht mehr in dieses gb posten können.
 

Pennywise

assimiliert
Als erstes sollte immer der Referer geprüft werden, damit NUR von der eigenen Seite Posts angenommen werden. Dann kann man den User in einer Session überprüfen, vielleicht noch einen Cookie setzen, falls dieses misslingt die IP merken.
Die Grafik-Codelösung bremst jemand nur bedingt, wenn er es eh manuell macht, ist für mich die letzte Lösung, da sich der ein oder andere etwas gegängelt vorkommt.
 

HeikeFy

assimiliert
der Referer wird aber nicht immer übertragen, teils weil der Browser dies nicht unterstützt, teils weil der Anwender hinter einem Proxy sitzt

siehe auch hier

um aber auf die eigentliche Frage zurückzukommen

die Lösung hier wäre die IP auszulesen und diese dann für eine Zeit X zu sperren
 

Pennywise

assimiliert
Zusätzlich könnte man noch die Anzahl der Einträge begrenzen, z.B. wenn in den letzten 10 Minuten mehr als X Beiträge gesendet wurden wird in der nächsten halben Stunde keiner mehr angenommen. Auf einer privaten Seite können diese Werte relativ niedrig angesetzt werden.
Denn egal was man macht - jede Beschränkung ist mehr oder weniger schwer auszutricksen.
 

Imperator

gehört zum Inventar
Pennywise schrieb:
Zusätzlich könnte man noch die Anzahl der Einträge begrenzen, z.B. wenn in den letzten 10 Minuten mehr als X Beiträge gesendet wurden wird in der nächsten halben Stunde keiner mehr angenommen. Auf einer privaten Seite können diese Werte relativ niedrig angesetzt werden.
Denn egal was man macht - jede Beschränkung ist mehr oder weniger schwer auszutricksen.


Das ist genau das was ich machen will^^
das hab ich versucht zu erklären :)

hab nur keine ahnung wie man das machen könnte ^^
 

Pennywise

assimiliert
Prinzipiell legst du ja sicherlich jetzt schon die Einträge im Gästebuch gemeinsam mit dem Datum als Timestamp ab. Da dieser in Sekunden inkrementiert wird werden 10 Minuten als 600 Sekunden angesehen. Also wäre die Abfrage "WHERE datum<time()-600". Dafür kannst du entweder die MYSQL-Funktion COUNT oder die dementsprechende PHP-Funktion separat verwenden.
Wenn dieser Fall eingetreten ist musst du dir den Zustand irgendwie merken, sei es nun in der Datenbank, Textdatei ... und die aktuelle Zeit zwischenspeichern. Wenn in diesem Zwischenspeicher eine Zahl ungleich 0 steht wird geprüft ob die aktuelle Zeit speicher+1800<time() ist. Dann wird der Zwischenspeicher genullt und der Beitrag zugelassen, ansonsten kommt ne Fehlermeldung.
 
Oben