Spamschutz

Willy

Gesperrt
Wenn ich z.B. ein Gästebuch schreibe, dann will ich sicherlich nicht, dass jemand tausen Einträge hintereinander reinschreibt.
Also könnte man doch den MySQL Eintrag limitieren - mit LIMIT - aber dadurch wird leider nur erreicht, dass es pro Skriptaufruf einmal abgeschickt wird. Wenn jemand aber öfter auf "Absenden..." klickt, dann wird das Script mehrmals ausgeführt und somit ist es praktisch sinnlos LIMIT zu verwenden. Vielleicht habt ihr ne gute Idee!:eek:
 
mach eine Zeitbeschränkung rein das man nur alle 5 Minuten posten kann, dann vergeht den Spammern schnell die lust.
Also mit ner IP Sperre für 5 min mein ich.
2b
 
las einfach jeden eintrag mit ip speichern...
beim speichern vergleichst du die ip des users mit der ip des letzten gespeicherten postings, haut es hin, also is sie gleich machste den "spammer" runter ;), also ich meine du weisst ihn in einem netten ton auf sein gespamme hin :)
 
neue Spalte: timestamp
timestamp des eintrags reinschreiben
Ip natürlich auch inne extra spalte..

Dann abfragen ob ip schon mal geposted
und dann abfragen ob $timestamp_db < aktueller_timestamp - 18000
wenn ja dann darf er noch nicht wieder posten

so im groben
2b
 
kannst es auch über date(h) regeln dann halt noch die minute etc.... und mit der aktuellen zeit vergleichen, wenns einen bestimmten abstand überschritten hat, is das och okken....

mfg
 
Hi,

so mach ich das, geht astrein.
Fallste net weisst, was mit dem code anfangen sollst: :)

Wenn jemand bei deinem Gästebuch das Formular, das er ausgefüllt hat, abschickt, soll diese Site geladen werden, die genau den diesen Code enthält. Meinetwegen nennst se spamm.php oder so. Und ganz unten steht die zeile

include ("IrgendEineSite.php");

Hier kannste die eigentliche Site includen, die dann das auswertet was ausgefüllt wurde, und den Eintrag speichert.

Hoffe es hilft dir weiter..


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.txt";
    $anzahleintraege = 1000;
    $zeitlimit = 10; // 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 "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#000000\">!!!!!!!! NICHT SPAMMEN !!!!!!!<br><br></font>";
}

// ENDE des Spammschutzes

else 

{

// Diese Site laden, wenn Zugriff ok

include ("IrgendEineSite.php");

}

?>

bye
 
Zuletzt bearbeitet:
was ist da faul?

hm.

debug version:

PHP:
$ipcheck_result = mysql_query("SELECT timestamp, ip FROM newsstudio_comments WHERE ip = '$REMOTE_ADDR' LIMIT 1", $link);
if(!$ipcheck_result) { die("Fehler: Ip Vergleich nicht möglich.<br>".mysql_error()); }
if(mysql_num_rows($ipcheck_result))
{
print "eintrag mit dieser ip gefunden.<br>";
$db = mysql_fetch_array($ipcheck_result);
$db_timestamp = $db['timestamp'];
print "db_timestamp: $db_timestamp<br>";
$this_timestamp = time();
print "jetzt: $this_timestamp<br>";
if($db_timestamp < $this_timestamp-120)
{
die("$spamming_error");
}
else
{
print "Kein Fehler<br>";
}
}
 
für mich stellt sich die frage, wenn ein User ein Formular ausfüllt, kann ich das ja in nem hidden feld machen das er die ip mitschickt...aber wie bekomme ich die ip des users heraus, welche funktion ist das ?

danke

edit:

aso $REMOTE_ADDR

lol
 
Zuletzt bearbeitet:
Zurück