Hi,
ich hab irgendwo hier mal nen code für einen spammschutz gefunden. Zuerst dachte ich, dass der auch astrein funktioniert, aber dann hab ich das mal genauer getestet. Angenommen ich stell den schutz auf 60 sekunden, also dass jemand nur alle 60 sek posten kann, dann gelten die 60 sekunden komischerweise nicht nur für einen user, sondern für ALLE. Normal sollte der das ja anhand der ips trennen, wer nun posten darf und wer nicht, aber das macht der nicht. Kann bitte mal jemand schauen was an dem code fehlerhaft ist? Wie gesagt, ich hab den direkt von hier, unverändert.
ich hab irgendwo hier mal nen code für einen spammschutz gefunden. Zuerst dachte ich, dass der auch astrein funktioniert, aber dann hab ich das mal genauer getestet. Angenommen ich stell den schutz auf 60 sekunden, also dass jemand nur alle 60 sek posten kann, dann gelten die 60 sekunden komischerweise nicht nur für einen user, sondern für ALLE. Normal sollte der das ja anhand der ips trennen, wer nun posten darf und wer nicht, aber das macht der nicht. Kann bitte mal jemand schauen was an dem code fehlerhaft ist? Wie gesagt, ich hab den direkt von hier, unverändert.
PHP:
<?php
// ANFANG des Spammschutzes
// Speicherung der Daten in einer Datei
function schreiben($datei,$mode){
global $ip;
$ip=getenv ("HTTP_X_FORWARDED_FOR");
$fp = fopen($datei,$mode);
$eintrag=$ip."|".time()."\n";
fwrite($fp,$eintrag);
fclose($fp);
}
function ip_sperre() {
// Einstellungen
global $ip;
$ip=getenv ("HTTP_X_FORWARDED_FOR");
$reloadlogdatei = "spamm/comment.txt";
$anzahleintraege = 1000;
$zeitlimit = 60; // in Sekunden
// Prüft, ob Datei existiert => ansonsten Erstellen
if(!file_exists($reloadlogdatei)) {
$datei = fopen($reloadlogdatei,"w+");
fclose($datei);
}
$fp = file($reloadlogdatei);
$size = sizeof($fp);
// Beschreibt die Datei, wenn Liste voll
if($size >= $anzahleintraege){
schreiben($reloadlogdatei,"w");
// Prüft, ob eine IP in der Liste steht
} else {
for ($i=0;$i<$size;$i++) {
$zeile = explode("|",$fp[$i]);
// IP wird gefunden
if ($zeile[0] == $ip AND $zeile[1] > (time()-$zeitlimit)){
$ausgabe = true;
// IP wird nicht gefunden
} else {
$ausgabe = false;
}
}
// Protokolliert die IP-Adresse (schreibt)
schreiben($reloadlogdatei,"a+");
}
return $ausgabe;
}
// Hauptaufruf des Programms
if(ip_sperre()!=false)
{
echo "Sie können innerhalb von 60 Sekunden nur einmal posten";
}
// ENDE des Spammschutzes
else
{
include ("post_kommentar.php");
}
?>