Guten Morgen,
2004 wurde für meinen Bruder und andere Opfer eines Verkehrsunfalls eine Gedenkseite eingerichtet. Seit geraumer Zeit wird das Gästebuch durch einen Spambot zugemüllt, es tragen kaum noch Bekannte/Freunde ein, da sich die Spameinträge unerträglich häufen.
Habe bereits die Zugangsdaten bekommen und ich kann die Einträge manuell entfernen, da ich aber in der Woche keine Möglichkeit habe das Internet zu nutzen, sammeln sich bis hin zum Wochenende ziemlich viele Einträge an
Da ich mich mit PHP absolut nicht auskenne, konnte ich bis jetzt nichts gegen den Bot unternehmen. Ein Freund von mir hat bereits ein Captcha eingebaut, welches aber nicht geholfen hat.
Würde mich sehr freuen, wenn mir jemand bei dem Problem helfen könnte.
Vielleicht erklärt sich sogar jemand bereit, mal über den Code zu schauen und evtl. mehr Spamschutz einzubauen.
Danke!
spawn
PHP-TXT basierendes Gästebuch -> Suche Hilfe gegen Spambo
-
-
naja das captcha ist ja auch nicht wirklich tauglich so, die buchstaben sind ganz normal lesbar so..
dein kollege soll das captcha einfach so anpassen, dass das bild weniger einfach von bots ausgelesen werden kann. also ein captcha wie es zb. bei youtube oder so ist.
beispiele -> http://www.newfreedownloads.com/imgs/13794-w400.jpg
so long
-
Ich habe bei meinem GB ein kleines Captcha das einfach 4 Zahlen darstellt und das funktioniert.
Das Kontakt Formular leider nichtSpinnt mein PC oder warum kommt wenn ich auf die Seite gehe mein Office 2000 installations anzeige
-
danke schonmal für die antworten!
wir werden sofort versuchen das captcha entsprechend zu ändern.
hoffe mal, dass der spam dann endlich unterbunden wird...
hat zufällig jemand einen guten code?grüße spawn
-
Hallo,
naja irgendwie bekommen wir es nicht hin...
irgendjemand hier, der sich die zeit nehmen würde, ein besseres captcha einzubauen?
bei einem guten ergebnis würde ich auch die mühen bezahlen...viele grüße spawn
-
Eine andere Möglichkeit sind Sessions. Die Spambots nutzen die Formulare immer direkt aus, sprich es werden Daten per Post direkt an das Script geschickt. Erstellt man auf der Startseite (da gehen die Bots nicht mehr hin) eine Sessionvariable, kann man in dem Script, dass die Daten verarbeitet, prüfen, ob diese Variable gesetzt ist. Wenn nein, kein Eintrag möglich, wenn ja eintragen.
phpfan
-
Danke für die Antworten, aber wie ich bereits erwähnt habe, kenne ich mich mit php absolut nicht aus und mein kumpel weiß auch nicht mehr weiter...
wär nett wenn sich mal jemand den code anschauen und diesen evtl. überarbeiten könnte. ich weiß ja nicht wie lange das dauert, aber vielleicht ist das ja auch nur eine sache von 30 min.
wäre demjenigen auf jeden fall sehr dankbar!viele grüße spawn
-
Diesen Teil an den Anfang deiner index.php der Homepage:
Code<? session_start(); if (!isset ($_SESSION['home_visited'])) $_SESSION['home_visited'] = true; ?>
Diesen Teil an den Anfang des Scriptes, dass die Daten aus dem Formular verarbeitet:Code<? session_start(); if (!isset ($_SESSION['home_visited'])) die ("Spambots haben keine Berechtigung"); ?>
phpfan -
okay danke!
werde es gleich mal ausprobierenviele grüße spawn
-
ich verstehe das mit der session überhaupt nicht.....was macht das denn jetzt anders??oder woher weiß der session das ich kein bot bin???
-
Zitat von Anonymous
ich verstehe das mit der session überhaupt nicht
Macht nix, kannst das ja noch lernen: http://www.php.net/manual/de/features.sessions.phpDie Sessionsvariable wird nur in der index.php der Homepage gesetzt. Ein Spambot findet aber das Formular, liest die Methode und Action aus und und sendet dann immer direkt an dieses Script die Daten. Mit anderen Worten, ein Bot geht nicht über die index.php der Homepage. Also kann man in dem Script mit Hilfe der Sessionvariable feststellen, ob das Script von der Homepage oder direkt aufgerufen wurde.
Es macht immer Spaß, wenn man Grundlagen erklären darf.
phpfan
-
hmm...entweder ich habe irgendwas falsch gemacht oder der bot konnte selbst das umgehen.
@phpfan:
könntest du dir vll mal den code meiner hp anschauen und den evtl verbessern?
wär echt nett!
falls ja dann schick einfach ne pn mit deiner email-adresse an mich.grüße spawn
-
Zitat
entweder ich habe irgendwas falsch gemacht
Da würde ich mal drauf tippen. Und nein, ich möchte nicht deine Quellcodes per Mail bekommen. Zeige, was du in der index.php der Homepage eingebaut hast und zeige das Script, dass die Formulardaten des GB's verarbeitet.phpfan
-
das gästebuch besteht aus einer book.php und einer verify.php, wobei die erste datei das komplette gästebuch generiert und die zweite das captcha. die einträge werden in einer txt-datei gespeichert.
der code der book.php ist ziemlich lang, deshalb stelle ich nur einen ausschnitt hier rein.PHP
Alles anzeigen<? session_start(); if (!isset ($_SESSION['home_visited'])) die ("Spambots haben keine Berechtigung"); ?> <?php // GENERAL $name = 'eintraege.txt'; // Where the entries will be stored $timetowarp= 65; // Max Number of connected character till it warps. Adapt it if you change the fontsize! $admincode = 'XXXX'; // Set the administration code! // WRITE DATA if ($_POST[adminaction] == 1 ) { $adminaction = 0; $ok = true; $nachricht = $_POST[nachricht]; $nachricht = eregi_replace("\[img]URL\[/img]", "", $nachricht); // for some stupid people $username = $_POST[username]; $usermail = $_POST[usermail]; if ($username == "" ) { $ok = false;} if ($usermail == "" ) { $usermail = "Kein Eintrag!";} if ($nachricht == "" ) { $ok = false;} if (strpos($usermail, '@') == 0) { $usermail = "Kein Eintrag!";} if ($_POST[verify] != $_SESSION["the_code"]) { $ok = false; } $username = ereg_replace (">", ">", $username); $username = ereg_replace ("<", "<", $username); $nachricht = ereg_replace ("<", "<", $nachricht); $nachricht = ereg_replace (">", ">", $nachricht); $usermail = ereg_replace ("<", "<", $usermail); $usermail = ereg_replace (">", ">", $usermail); $nachricht = ereg_replace ("\r\n", " ", $nachricht); $nachricht = ereg_replace ("\n\r", " ", $nachricht); $nachricht = ereg_replace ("\n", " ", $nachricht); if ($ok == true) { $datumeingabe = date("d.m.y - H:i"); $file = fopen($name, "a"); fputs($file, "$datumeingabe>$username>$usermail>$nachricht"); fputs($file, "\r\n"); fclose($file); } if ($ok == false) { echo ' <font color="#FFFFFF">[b]Bitte geben Sie den Sicherheitscode ein![/b]</font></p>'; } } // Seitenübertragung $HTTP_GET_VARS['Seite']; if ($_GET[page] == '' ) {$_GET[page] = 1;} $HTTP_GET_VARS['block']; if ($block == '' ) {$block = 1;} $HTTP_GET_VARS['admin']; if ($_GET[admin] == '' ) {$_GET[admin] = 0;} // READ AND WRITE DATA IF DATABASE NEEDS TO BE CHANGED if ($_GET[admin] == 2) { if ($_POST[passcode] == $admincode) { $fd = fopen($name, "r"); $array = file($name); $i = sizeof($array); fclose ($fd); $fd = fopen($name, "w"); $s = 0; while ($s <= $i): if ($_POST[mes][$s+1] <> 'DEL') { fputs($fd, $array[$s]); } $s++; endwhile; fclose ($fd); echo '<font color="#FFFFFF">[b]Selected messages have been deleted![/b]</font> '; } else { echo '<font color="#FFFFFF">[b]Insert right passcode![/b]</font> '; } $admin=1; } // LESE DATEN / READ DATA if ( file_exists( $name) == TRUE) { // $array von hinten nach vorne durchlaufen $fd = fopen($name, "r"); $array = file($name); fclose ($fd); $zeilen = 0; $i = sizeof($array); while ($i--) { $zeilen = $zeilen+1; $arrayback[$zeilen] = trim($array[$i]) . " \n"; } $pagecopy = $_GET[page]; $_GET[page] = ($_GET[page]-1)*10; echo '<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="99%"> <tr> <td width="50%">[b]Die Einträge: '; if ($_GET[admin] == 1 ) {echo '<form method=post ACTION="book.php?admin=2">'; } echo'</td> <td width="50%"> <p align="right">[b]('.$zeilen.' Einträge insgesamt)</font></td> </tr> </table> '; for ($i = 1; $i <= 10; $i++) { // loop for message displaying $zeile = $arrayback[$i+$_GET[page]]; if ($zeile <> "") { $datum = substr($zeile,0, strpos($zeile, '>') ); $temp = substr($zeile,strpos($zeile, '>')+1,strlen($zeile)); $username = substr($temp,0,strpos($temp,">")); $temp = substr($temp,strpos($temp,">")+1, strlen($temp)); $usermail = substr($temp,0,strpos($temp,">")); $nachricht = substr($temp,strpos($temp,">"),strlen($temp)); $nachricht = eregi_replace('\\\"', '"', $nachricht); $nachricht = eregi_replace("\\\'", "'", $nachricht); // SIMILIES ADAPTION // GENERATE URL LINKs $fractal =''; $setoff = 0; for ($l = 0; $l <= strlen($nachricht); $l++) { if ($nachricht[$l+0].$nachricht[$l+1].$nachricht[$l+2].$nachricht[$l+3] == 'http') { if ($nachricht[$l-1] <> ']' ) { $fractal = $fractal.'<a href="'; $setoff = 1; $linkstrpos = $l; } } if ($setoff == 1 ) { if ($nachricht[$l] == ' ' ) { $linkname = substr($nachricht, $linkstrpos, $l-$linkstrpos); $fractal = $fractal.'" target="_new">'.$linkname.'</a>'; $setoff = 0; } } if ($setoff == 1 ) { if ($nachricht[$l] == '<' ) { $linkname = substr($nachricht, $linkstrpos, $l-$linkstrpos); $fractal = $fractal.'" target="_new">'.$linkname.'</a>'; $setoff = 0; } } $fractal = $fractal.$nachricht[$l]; } $nachricht = $fractal; // CONVERT IMAGES $nachricht = eregi_replace('\[\img]', '<img src="', $nachricht); $nachricht = eregi_replace('\[\/img]', '">', $nachricht); // DO THE WARPING $fractal =''; $iz = 0; for ($z = 1; $z <= strlen($nachricht); $z++) { $fractal = $fractal.$nachricht[$z]; $iz++; if ($iz == $timetowarp) { if (strpos(substr($nachricht, $z-$iz, $iz),' ') == False ) { if (strpos(substr($fractal , strlen($fractal)-3, strlen($fractal)),'<') == False ){$fractal = $fractal.' ' ; }} $iz = 0; } } $nachricht = $fractal; // $nachricht = eregi_replace('src="http: ', 'src="http:', $nachricht); $nummerdis = $zeilen-($i+$_GET[page])+1; if ($_GET[admin] == 1 ) {$deletebox = ' <font color="#FFFFFF">Lösch diesen Eintrag<input type="checkbox" name="mes['.$nummerdis.']" value="DEL" >';} echo '<table borderColor="#FFFFFF" cellSpacing="0" cellPadding="0" width="99%" border="0" style="border-collapse: collapse"> <tr> <td align="right" width="20" height="1"> <p align="left">[b] <font color="#FFFFFF" >Nr.</font>[/b]</td> <td width="40" height="1"> <p align="left"><font color="#0078b3">'.$nummerdis.'</font></td> <td width="155" height="1"> [b]Datum:[/b] '.$datum.'</td> <td width="300" height="1"> <p align="left">[b]Name: [/b]'.$username.'</td> <td width="231" height="1"> <p align="left">[b]E-mail:[/b] [url='mailto:'.$usermail.'']'.$usermail.'[/url] </td> </tr> </table> <table style="BORDER-COLLAPSE: collapse" borderColor="#FFFFFF" cellSpacing="0" cellPadding="0" width="99%" border="0"> <tr> <td width="99%"> <p align="left"> '.$nachricht.$deletebox.'</td> </tr> </table> '; }}
...hoffe das kann euch irgendwie helfen!
grüße spawn