• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Captacha problem

Status
Für weitere Antworten geschlossen.

wolf360

Neues Mitglied
Servus,

ich hab seit wochen ein Spambot auf meiner Hompage und weiß net wie ich den wegbekommn, hab den etz scho ein paar mal geändert und hatte dann auch immer mal eine Woche pause mit den Spam-einträgen abba jetzt gehts wieder los....

Rock im Hennahuf

Was kann ich noch tun damit ich den Spambot endlich weg bekomme?

gruß wolf360
 
Ich bekomm den Bot net weg -.-"

hab etz 2 Captchas und eine "Hidden-Field wo nicht ausgefüllt werdn darf etc.

trotzdem bekomm ich Spämeinträge....

kann mir jemand helfen ?
 
PHP:
 <?php include('head.php'); ?>
<style>
.weg{
display: none;
}
</style>
<?php function zeichen_filter($text){
                   $text_alt = $text;
                   $zeichen = array("<","\\",">");
                   $text_neu = str_replace($zeichen, "",$text);
                   return $text_neu;
         }

   if(isset($_POST["submit"])){
         if(isset($_POST['url']) && || !empty($_POST["captcha"])) {
          echo "Spamverdacht kein Eintrag erfolgt<br>";
         }else{
     if(empty($_POST["name"]) || empty($_POST["text"])){
                 echo "* Felder sind Pflichtfelder<br>";
     }else{
       if($_SESSION["capt"] == $_POST["code"]){

         $name = mysql_real_escape_string(zeichen_filter($_POST["name"]));
        $text = mysql_real_escape_string(zeichen_filter($_POST["text"]));
        $email = mysql_real_escape_string(zeichen_filter($_POST["email"]));



         if(!empty($_POST["email"])){
               $mail =  preg_match("#\@#", $email);
         }else{
                 $mail = true;
         }

                 if($mail == false){
                         echo "Fehler bei der Email Adresse<br>";
                 }else{


        $zeit = time();
         $uhrzeit = date("H:i",$zeit);
         $datum = date("d.m.Y", $zeit);



       $ip = $_SERVER["REMOTE_ADDR"];

         $ipsperre = "SELECT * FROM `ipsperre` WHERE `ip` = '".$ip."'";
         $pruefung_query = mysql_query($ipsperre);
         $pruefung = mysql_num_rows($pruefung_query);
         $ip_uhr = mysql_fetch_object($pruefung_query);
         $ip_uhrzeit = $ip_uhr->uhrzeit;
          $zeit_neu = $zeit+300;
                 if($pruefung != 1){

                     $ip_eintrag = "INSERT INTO `ipsperre` (`ip`,`uhrzeit`) VALUES ('".$ip."','".$zeit_neu."') ";
                    $ip_eintragen = mysql_query($ip_eintrag);

                    $eintrag = "INSERT INTO `gaestebuch` (`zeit`,`datum`,`name`,`email`,`text`) VALUES ('".$uhrzeit."','".$datum."', '".$name."', '".$email."','".$text."')";
                                  $text_eintragen = mysql_query($eintrag) or DIE("FEHLER");

                 }else{


                         if($zeit <= $ip_uhrzeit){
                                 echo "Bitte noch warten<br>";
                         }else{
                                 $ip_update = "UPDATE `ipsperre` Set `uhrzeit` = '".$zeit_neu."' WHERE ip = '".$ip."'";
                                $update = mysql_query($ip_update);

                                  $eintrag = "INSERT INTO `gaestebuch` (`name`,`text`, `email`, `zeit`, `datum`) VALUES ('".$name."','".$text."', '".$email."', '".$uhrzeit."','".$datum."')";
                                  $text_eintragen = mysql_query($eintrag);
                                  }


                                }




                 }
           }else{
                 echo "Fehler beim der Code Prüfung<br>";
            }
           }
   }     }


?>
<b>Für einen Eintrag bitte das Feld "Leeren" leeren<br></b>
<form name="formular" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<fieldset>
<?php echo '<img style="border-color:#999999;" alt="sicherheitscode" src="captcha.php" /><br><br>';  ?>
<label for="code">Code:</label> <input id="code" onkeydown="zaehlen(this, 'limit', 'code', '4')" type="text" name="code" maxlength="4"/><br />
<label for="captcha">Leeren:</label> <input id="captcha" type="text" name="captcha" value="Spamschutz" maxlength="10" /><br />
<label for="name">Name*:</label> <input id="name" onkeydown="zaehlen(this, 'limit', 'email', '50')" type="text" name="name" maxlength="50" /><br />
<p class="weg"><label for="url">Ihre Homepage-Adresse</label><input id="url" type="text" name="url" /></p>
<label for="email">E-Mail:</label> <input id="email" onkeydown="zaehlen(this, 'limit', 'text', '80')" type="text" name="email" maxlength="80"/><br />
<label for="text">Text*</label><textarea rows="6" cols="35" id="text" onkeydown="zaehlen(this, 'limit', 'submit', '200', 'j')" type="text" name="text" maxlength="200" /></textarea><br />
<div class="rechts"><input type="submit" id="submit"  name="submit" value="Senden" /><input type="reset" name="reset" value="L&ouml;schen" /></div>
</fieldset>
</form>
<span id="limit"></span><br>

<?php

         $array =  mysql_zaehlen("gaestebuch");
         if(isset($_GET["seite"])){
               $seite = $_GET["seite"];




                $pruefung = preg_match("#\"#", $seite);
                if($pruefung == true){
                         echo "Error";
                }else{
                         $forward = $seite+1;
                         $back = $seite-1;
                     if($seite <= 0){
                         echo "Fehler beim übergeben der Seite";
                     }else{
                         if($seite == 1){
                                 echo '<a href="gaestebuch.php?seite='.$forward.'">Vor</a>';
                         }else{
                                 echo '<a href="gaestebuch.php?seite='.$back.'">Zurück</a><br>';
                                if($seite < (int)$array[0]){
                                 echo '<a href="gaestebuch.php?seite='.$forward.'">Vor</a>';
                                 }
                         }
                     }

                }



           }else{

               if($array[0] != 1){
                 echo '<a href="gaestebuch.php?seite=2">Vor</a>';
                 $seite = 1;
                 }else{
                 $seite = 1;
                 }

           }

       if($seite <= 0 || $seite > $array[0] || $pruefung == true){
                 echo "<br>Error";
       }else{
          $ausgabe = "SELECT * FROM `gaestebuch` ORDER BY id DESC LIMIT ".$array[$seite]."";
         $ausgeben = mysql_query($ausgabe);
        }



?>
<div id="ausgabe">
<?php

    while($reihe = mysql_fetch_array($ausgeben)){

         if(empty($reihe["email"])){
                 $name = $reihe["name"];
         }else{
                 $name =  '<a target="_blank" href="mailto:'.$reihe["email"].'">'.$reihe["name"].'</a>';
         }



         echo '<p class="gb_ausgabe">';
         echo '<span class="absender_schrift">Name: '.$name.' ['.$reihe["datum"].'/'.$reihe["zeit"].']</span><br />';
         echo '<span class="absender_text">'.$reihe["text"]."</span><br />";
         echo '</p>';

    }
?>
</div>

und vom Captcha:

PHP:
<?php
  if(isset($_SESSION["capt"]){
     session_destroy();
  }
    $randomg = rand(1376,9999);

    $im = imagecreate(100,50);
    $white = imagecolorallocate($im,0,0,0);
    $black = imagecolorallocate($im,255,255,255);
    imagettftext($im,30,0,5,40,$black,"dendriti.ttf",$randomg);
    header("Content-type: image/png");
    imagepng($im);
    imagedestroy($im);
    $session = base64_decode($randomg);
    $_SESSION["capt"] = $session;


?>
 
Zuletzt bearbeitet:
schon nach den ersten zeilen findet man seltsames...

PHP:
if(isset($_POST['url']) && $_POST['url']  ||....
in worten:
wenn $_POST['url'] vorhanden ist und $_POST['url'], dann

wäre das eines meiner kinder, würde ich jetzt fragen, und $_POST['url'] WAS?? was soll das also bedeuten ?

wenn du auf etwas prüfst, solltest du eventuelle prioritäten beachten. prüfe zuerst auf spamverdacht, wenn ja
PHP:
 die("und tschüss...");
wenn die prüfungen alle ok sind, prüfst du als nächstes ob alle ausfüllbedingungen ok sind, wenn ja, schreiben, wenn nein, neu laden der seite.

zum spam selbst.
ich habe immernoch blacklisten im einsatz, meine sieht so aus:
Code:
viagra
medic
cheap
wiki
buy
cyrusi
xanax
offer
donat
sale
free
<br>
adult
casino
celullite
chicks
cialis
female
****
href=
http
hydrocodone
iframe
kliktop
penis
pharma
phentermine
pills
poker
religious
ringtone
sexy
teens
via gra
url=
blogg
effects
Visit
nach dem eintrag setze ich eine sessions_variable, die für eine stunde einen weiteren eintrag verhindert. niemand sollte sich mehrmals innerhalb einer stunde in ein gästebuch eintragen
 
und wie arbeitet man am effektivstn mit ner Blacklist? ich mein soll ich die alle in ein Textdocument einfügen oder mit regexp, hab noch nicht wirklich mit einer Blacklist gearbeitet.

danke für die hilfe

gruß wolf360
 
Du arbeitest Quasi den eingegebenen Gästebuch-Eintrag nach den Wörtern der Blacklist ab und gibst eine Fehlermeldung aus, sobald eines der Wörter vorkommt.

Ich hab noch einen anderen Vorschlag:
Ich benutze auf meiner Website ein sogenanntes Clock-Captcha:

WWW.STEVESCORNER.DE

Der Vorteil ist: Noch kein Bot kann dieses Captcha auslesen, da es nicht besonders verbreitet ist. Für einen Menschen ist es allerdings kein Problem, die Uhrzeit einzutragen, da das jeder lesen kann.
 
ja das is ja die frage, wie mach ich das am besten mit dem "abarbeiten" soll ich die Wörter in einer Textdatei speichern und dann z.B. mit explode in einem Array speichern und dann mit z.B. preg_match prüfen?? oder mit einer Regexp.??

gruß wolf360
 
Und wenn es gar kein Bot ist?
Vielleicht verarscht dich jemand.
Filter doch alles raus was "a href" enthält.
Oder sind Links in deinem Gästebuch erwünscht?
 
Zuletzt bearbeitet:
mhh xD dann hätte diese Person keine Hobbies xD....

ich hab die ganzn Spameinträge gelöscht abba es warn immer so ca halb stündlich Einträge da und wer macht sich da so ne mühe???
Ich mein wärs jetzt ein Tag gewesn okey, aber diese Einträge hab ich jetzt schon seit wochen...
 
Selbst wenn dich einer ärgern wollte, löst das immer noch nicht das Problem. Ich würde es mal mit dem Clock-Captcha probieren, dann siehst du relativ sicher, ob da Mensch oder Maschine vorsitzt.

Das mit der Blacklist: In ein Array einlesen / schreiben, dann

PHP:
foreach($blacklist as $key => $val) {
  if(strpos($deintext, $val)) {
    echo 'Verzieh dich, Spambot (oder Mensch, der böse Wörter nutzt)';
  }
}
 
ja das is ja die frage, wie mach ich das am besten mit dem "abarbeiten" soll ich die Wörter in einer Textdatei speichern und dann z.B. mit explode in einem Array speichern und dann mit z.B. preg_match prüfen?? oder mit einer Regexp.??

gruß wolf360
ich mache das beinhat und kontrolliere mit stristr().
eine schleife durchlaufen lassen und je blacklist eintrag den text mit dem inhalt vergleichen.

einträge ins gästebuch sind ja grüsse oder danksagungen etc. nicht viagra und konsorten
 
Zuletzt bearbeitet von einem Moderator:
machst du das dann mit einer forschleife??? oder wie überprüfst du alle wörter einzeln?

das hab ich blos immernoch nicht verstandn -.-"

Edit: okey hab den Eintrag von ohrflieger übersehn.

okey hab das etz mal gestet:

test.txt
Code:
test
huhu
etc

PHP:
       $lines = file("test.txt");
   $headers = explode(" ",$lines);
   $text = "Hallo dies ist ein test Testtext etc.";
   foreach($lines as $l) {
      if(stristr($text, $l) === FALSE) {
        echo "Text nicht gefundn<br>".$l."<br>";
      }else{
        echo "Zeichen gefunden";
      }
   }

die Ausgabe ist aber:
Text nicht gefundn
test
Text nicht gefundn
huhu
Zeichen gefunden

warum wird test nicht gefunden ?
 
Zuletzt bearbeitet:
ganz einfach

PHP:
$text = 'Dein suchtext';
$blacklist = file('blacklist.txt');

$text_pruefung = str_ireplace($blacklist, '*', $text);

if($text != $text_pruefung) {
    die('Keine bösen wörter!');
}
 
PHP:
<?PHP
$tofind_text = file("blacklist.var");
foreach($tofind_text as $element) 
{ 
    if(trim(chop($element)) != '') 
    { 
        if (stristr(strtolower($eintrag),trim(chop(strtolower($element)))) == TRUE) 
        { 
            $_SESSION['iswritten'] = 1; 
            adr_log(mkin_foo("versuch text-blacklist-eintrag zu machen text: [".htmlspecialchars(stripslashes(nlbr($eintrag)))."] keyword:^".trim(chop($element))."^")); 
            echo "der eintrag wurde geloggt, da er in der blackliste steht,<br><br>eine pr&uuml;fung des eintrags und deiner ip wird veranlasst.... moment !"; 
            ?><meta http-equiv="refresh" content="5;URL=<?=$PHP_SELF?>?mode=view"><? 
            exit; 
        } 
    } 
} 
?>
ist der besucher eine person und die session gesetzt, ist ein neuer eintrag ohne schliessen des browsers nicht mehr möglich
die funktionen adr_log() und mkin_foo erstellen einen logeintrag. der sieht dann z.b. so aus:
Code:
Mon, 15 Dec 2008 20:27:11 +0100 versuch text-blacklist-eintrag zu machen text: [oCFmT5  &lt;a href=&quot;http://kbhofwsfgsht.com/&quot;&gt;kbhofwsfgsht&lt;/a&gt;, [u_r_l=http://ebdjuatepgez.com/]ebdjuatepgez[/u_r_l], [lin_k=http://sxuvwtbryhuy.com/]sxuvwtbryhuy[/lin_k], http://xyakapstyvwh.com/] keyword:^href=^ von: [] (IP:w.x.y.z)
ich durchsuche die logs täglich und werte die keywords aus. im schnitt habe ich ca 250 versuche in der woche, per href oder [ url] einen link einzutragen, viagra ist auf platz 2 mit ca 60 versuchen die woche, der rest in summe ca 200 eintrags versuche.
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.

Neueste Beiträge

Zurück
Oben