SPAM in je gastenboek. Je kijkt er even niet naar om en Bam!, je maakt ongewild reclame voor websites die zaken als Phentermine en Viagra aanbieden. Een zoektocht naar “phentermine gastenboek” levert inmiddels al zo’n 71.000 resultaten op. Hieronder bevinden zich overheidssites, commerciele websites, websites voor evenementen en vooral veel websites van hobbyisten.
Wat kun je doen om gastenboek SPAM te voorkomen?
- Een Javascript Check plaatsen
- Filteren op links
Javascript Check
Een simpele manier om de SPAM te voorkomen is het gebruik maken van een javascript check. Voeg aan je gastenboek formulier het volgende (verborgen) veld toe:
<input type="hidden" name="check" id="check" value="0" />
Vervolgens voeg je het volgende toe aan je <body> tag:
onload="document.getElementById("check").value=1"
Vervolgens kijk je in het script dat de invoer verwerkt of de waarde van het veld “check” gelijk is aan 0 of aan 1. Afhankelijk van hoe gefrustreerd je bent kun je dit afvangen met bijvoorbeeld:
if ($_POST && $_POST["check"] != 1) die("Heb je de afloop van iRobot gezien? That's what's gonna happen! Die()!");
De ’spambots’ die formulieren verzenden kunnen namelijk (nog) geen javascript uitvoeren. De door deze computers ingevulde formulier zullen dus een 0 opleveren. Op die manier kun je het kaf van het koren scheiden, maar een nadeel is wel dat mensen die javascript hebben uitgeschakeld, geen bijdrages kunnen leveren. Daarom zou je ze moeten waarschuwen door gebruik te maken van de <noscript> tag.
Filteren op links
Een andere manier om spam te achterhalen is het filteren op links. Hoe je een link ook schrijft, er zal altijd http:// of www in zitten. Door te filteren op deze manier ontneem je je bezoekers wel de mogelijkheid om een link te plaatsen, maar 99% van de spam hou je al snel tegen.
Stem op dit artikel of voeg het toe aan:
Voor mensen die JavaScript uit hebben staan, kun je ook een andere manier gebruiken. Zie voor een voorbeeld hiervan dit reactieformulier (JS aan- en uitzetten).
Ook niet voor bezoekers die JavaScript uit hebben staan.
“Ook niet voor bezoekers die JavaScript uit hebben staan.”
Dat is de keus van de bezoeker… veel sites werken niet goed zonder JavaScript. Overal duikt wel ergens een script op… Ik bied de mogelijkheid om email te sturen.
Precies, en dat zou niets uit moeten maken.
De javascript check zou je ook kunnen plaatsen bij het verwerken van het formulier, dus zonder het hidden field, maar in de code die de geposte data verwerkt.
Ik heb een javascriptje die op woorden filtert, maar sommigen gaan er toch door. Volgens mij zijn er bots die hun eigen scripts hebben om te “posten” en die dus ons formulier niet gebruiken.
In dit geval zijn al onze voorstellen waardeloos.
@Tom
Nee hoor.
Je moet het juist vereist maken dat het formulier gebruikt wordt. Het stukje javascript zorgt er voor dat er waarden in het verborgen veld van het formulier komen die de bot nooit zou kunnen verschaffen. In het voorbeeld is dat de value 1, maar dit zou ook ‘234800idefakdjfh002342′ kunnen zijn.
In het script die het formulier verwerkt kijk je dan of het verborgen veld ook daadwerkelijk ‘234800idefakdjfh002342′ bevat. Bevat het dit niet dan is het een bot of heeft de gebruiker javascript uitgeschakeld, in welk geval je een melding weer kunt geven.
Ik ken ben absoluut geen kenner, maar een feit is dat sommige bots toch in mijn guestbook posten terwijl ze woorden gebruiken die door mijn java script tegengehouden zouden moeten worden.
Het lijkt erdus op alsof ze de javascript code niet lezen en nodig hebben.
Of komt dit omdat ik niet jullie methode gebruik.
Mijn guestbook maakt wel gebruik van een posting via de server (pandora website van telenet).
Ik heb ook ondertussen een forum gevonden waar iemand hetzelfde oppert:
“De echte spam scripts hebben hier absoluut geen probleem mee… die lezen je Javascript code niet in, en voeren ze dus ook niet uit. Die kijken gewoon naar welke velden er op je form staan en de POST actie en genereren hier hun eigen POST code voor. ”
( link: http://pub.telenet.be/forum/viewtopic.php?t=4691
laatste bijdrage aan de discussie )
Ik zal het nog een keer proberen uit te leggen..
Inderdaad, bots kunnen geen Javascript uitvoeren en slaan dat stukje over. Daar spelen we juist op in.. Met Javascript uitgeschakeld / niet uitgevoerd ziet je POST array er namelijk zo uit:
$_POST ['naam'] = 'naam';
$_POST ['email'] = 'email';
$_POST ['bericht'] = 'bericht';
$_POST ['check'] = '0';
Zo weet je dus zeker dat het een bot is of iemand met Javascript uitgeschakeld.
Is Javascript ingeschakeld dan ziet je POST array er zo uit:
$_POST ['naam'] = 'naam';
$_POST ['email'] = 'email';
$_POST ['bericht'] = 'bericht';
$_POST ['check'] = '234800idefakdjfh002342'; // of 1 of whatever
Vervolgens plaats je in je verwerkingsscript de volgende regel:
if ($_POST ['check'] != '234800idefakdjfh002342') die('Stupid robot!');
Ik heb nog nooit een bot gezien die hier zonder menselijke hulp voorbij kwam.
Gebruik geen gastenboek met een externe url (meestal gratis maar met welk doel?) maar implementeer het binnen de eigen url.
Zorg dat je Gastenboek niet door een robot kan worden bezocht.
Hierdoor is je gastenboek voor spammers niet intressant omdat de door hun gedumpte url’s (meestal in links met H1 opmaak) ook niet door zoekmachines kunnen worden gevonden.
Uit mijn url-statistiek blijkt dat 97% van de bezoekers javascript aan hebben staan en slechts 2% uit! Omdat niet elke bezoeker in het gastenboek gaat schrijven is het dus geen probleem om javascript te gebruiken voor een verwijzing naar gastenboekpagina’s in een voor robots afgesloten directory.
Theo Buys said:
Beste administrator,
Ik had ook veel spam, maar nu ik het stukje toegevoegd heb, kan ik zelf niet meer invoeren, terwijl javascript aanstaat.
hieronder de code:
Gastenboek inschrijven
Naam:*
Email:
Url:
Commentaar:*
“;}
//FF kijken of naam en bericht ingevuld zijn…
else if($submit && empty($name) or empty($comment)) {
echo ”
Je hebt de verplichten velden niet ingevuld.Ga terug en probeer het nog eens.
“;
}
if ($_POST && $_POST[”check”] != 1) die(”Heb je de afloop van iRobot gezien? That’s what’s gonna happen! Die()!”);
//Toevoegen bericht aan de database
else if($submit && !empty($name) && !empty($comment)) {
////////////////////////////////////////////////////////
//Url verbeteren
$url = str_replace(”http://”,” “,$url);
//HTML tags verwijderen
$comment = htmlspecialchars($comment);
$comment = str_replace(”\r\n”,”",$comment);
//scheldworden filter
$comment = str_replace(”fuck”,”f**k”,$comment);
$comment = str_replace(”shit”,”***”,$comment);
$comment = str_replace(”dick”,”***”,$comment);
$comment = str_replace(”suck”,”***”,$comment);
$comment = str_replace(”cum”,”***”,$comment);
$comment = str_replace(”blowjob”,”***”,$comment);
$comment = str_replace(”pik”,”***”,$comment);
$comment = str_replace(”kut”,”k**”,$comment);
$comment = str_replace(”lul”,”l*l”,$comment);
$comment = str_replace(”eikel”,”***”,$comment);
$comment = str_replace(”klootzak”,”***”,$comment);
$comment = str_replace(”dyke”,”***”,$comment);
$comment = str_replace(”asshole”,”***”,$comment);
$comment = str_replace(”hoer”,”***”,$comment);
$comment = str_replace(”slet”,”***”,$comment);
$comment = str_replace(”hoer”,”***”,$comment);
$comment = str_replace(”teef”,”***”,$comment);
$comment = str_replace(”bitch”,”***”,$comment);
$comment = str_replace(”neger”,”zwarte man”,$comment);
/////////////////////////////////////////////////////
$insert = “INSERT INTO gbook VALUES ('’, ‘$name’, ‘$email’, ‘$url’, ‘$comment’, ‘$datum’,'wachtrij’)”;
$insert_res = @mysql_query($insert) or die(”No.”);
// webmaster op de hoogte stellen
$message = ” $name heeft een bericht in het gastenboek gezet.
$name staat in de wachtrij van het gastenboek van: www.siembra.nl.
Om de gast toe te voegen gaat u hierheen:
http://www.siembra.nl/gbook/admin/admin.php
Met Vriendelijke Groet, Uw webmaster”;
/* recipients */
$to = “***l” . “, ” ; // note the comma
$to .= “***”;
$subject = “Gastenboek getekend”;
/* To send HTML mail, you can set the Content-type header. */
$headers = “MIME-Version: 1.0\r\n”;
$headers .= “Content-type: text/html; charset=iso-8859-1\r\n”;
/* additional headers */
$headers .= “From: Siembra.nl \r\n”;
/* and now mail it */
mail($to, $subject, $message, $headers);
// bericht aan gast
echo ”
Bedankt voor je bericht $name. Je surft nu terug naar het gastenboek.
Na goedkeuring van de webmaster zal dit bericht op de site worden gezet.
“;
}
?>
Beste Poster,
Ik ken sinds kort ook dit probleem. Werkt deze oplossing ook voor frontpage?