Avatar billede weevil_dk Nybegynder
03. august 2005 - 17:29 Der er 5 kommentarer

Undgå spam i gæstebog

jeg har en gæstebog på www.weevil.dk

hvis i kigger i den kan i se at jeg har en million poster med spam? det er sku ret ufedt! Det er en meget simpel gæstebog, indtil videre men hvordan kan jeg (skrive noget kode) Der sætter en stopper for disse spambots der automatisk fylder min gæstebog med lort?


her er koden for min gæstebog:

#
# Antallet af poster i gæstebogen tælles
#

$alfa = "SELECT COUNT(*) FROM guestbook_1";
$numguests = mysql_query($alfa) or die (mysql_error());
$number = mysql_fetch_array($numguests);

$num = $number[0];

#
# Formularen til at skrive i gæstebogen. Navn, email, www og besked registreres.
#

if (isset($skriv)) {
echo "<br>Your Comment!<br>";
echo "<form action=$PHP_SELF?start=0&send=1 method=post>";
echo "<table border=0 cellpadding=5 cellspacing=0>";
echo "<tr><td align=right><strong>Name:</strong></td><td><input type=text name=navn size=30 maxsize=100 class=textarea></td></tr>";
echo "<tr><td align=right><strong>Email:</strong></td><td><input type=text name=email size=30 maxsize=100 class=textarea></td></tr>";
echo "<tr><td align=right valign=top><strong>Comment:</strong></td><td><textarea cols=30 rows=6 name=tekst class=textarea></textarea></td></tr>";
echo "<tr><td></td><td><input type=submit value=Ok! class=textarea></td></tr>";
echo "</table>";
echo "</form>"; }

#
# Den nye post i gæstebogen sendes til gæstebogen
#

if (isset($send)) {

$sql = "insert into guestbook_1(navn,email,besked,dato) values('$navn','$email','$tekst',now())";
@mysql_query($sql) or die (mysql_error()); }


#
# Nu hentes posterne ud fra gæstebogen. De formateres med linieskift, e-mail til xyz_xx_@_xx_xyz.com og hyperlinks udformes.
#
?>

<?php
#
# Links til næste side og ny kommentar.
#

echo "<a href=$PHP_SELF?start=0&skriv=1>Your Comment</a> : ";
echo "<a href=\"$PHP_SELF?start=$naeste_start_nr\">Next page</a> : ";
echo "<a href=login.php?side=login>login</a>";

?>

<table id=table>
<tr>
<td>

<?php
$antal = 10;
if(!$start || $start < 0) { $start = 0; }

$resultat = mysql_query("SELECT navn, email, besked, date_format(dato, '%e/%c %Y') AS tiden FROM guestbook_1 ORDER BY dato desc LIMIT $start, $antal") or die (mysql_error());
while ($raekke = mysql_fetch_array($resultat)) {
$besked = nl2br($raekke[besked]);
$at = '_xx_@_xx_';
$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
"<a target=_blank href=\"\\0\">\\0</a>", $besked);

$mail = ereg_replace('@', $at, $raekke[email]);
echo "<table><tr><td id=td1>Date: $raekke[tiden] Mail: <a href=mailto:$mail> : $raekke[navn]</a>
</td></tr><tr><td id=td2><br>$text</td></tr></table>";
echo "<br>";
}
?>

</td>
</tr>
</table>

</body>
Avatar billede Slettet bruger
03. august 2005 - 18:58 #1
Jeg har lavet en babbleboks engang, hvor jeg forsøgte at tage højde for spammere.

Jeg kigger på om de sidste tre indlæg kommer fra samme IP, og sletter dem hvis de gør - det er næppe den mest optimale løsning, men jeg ved ikke hvad man ellers kan gøre. Det forhindrer så også ikke spammere i at skrive tre indlæg i træk, men i gæstebøger og den slags er dette vel i forvejen unormalt.

Det kræver du skriver folks ip'er i din database ved indlæg.

Måske kan andre kommentatorer dele deres erfaringer.
Avatar billede jaw Nybegynder
03. august 2005 - 20:27 #2
Måske kombinere pacroon's forslag med en tidshorisont - altså, så man f.eks. kun kan skrive 3 indlæg indenfor 15 minutter. Igen tager det ikke 100% højde for det, men det kommer du nok næppe til at finde. Der er jo ingen sikker anti-spam til mails, så hvorfor skulle der være i PHP :) ?!
Avatar billede jakobdo Ekspert
03. august 2005 - 20:28 #3
Det er svært direkte at undgå spammere!
Ved at tjekke om de sidste 3 indlæg kommer fra samme ip, kan jo omgåes ved at bruge offentlige ip'er.
Så kan jeg lave 3 indlæg uden dette fanges!
Så undgå det kan du ikke!
Du kan jo evt gemme en session! (kan dog også omgåes ved at lukke browser og åbne siden igen)
Du kan gemme en cookie! (kan omgåes ved at deaktivere cookies)
Så helt undgåes kan det nok desværre ikke...
Avatar billede Slettet bruger
03. august 2005 - 21:34 #4
jakobdo > Med offentlige ip'er, mener du så offentlige proxy servere?

Det har du selvfølgelig helt ret i, men det er alligevel en forhindring for en privat flooder eller en dedikeret spambot at skulle skifte sin egen ip tre gange under et spamangreb.
Avatar billede jakobdo Ekspert
03. august 2005 - 22:01 #5
Jeg mente proxy ja!
Men det bliver selvfølgelig svære!
Og det vil en spambot nok ikke bruge.
Så måske ip kan være nok! :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester