Beste,

Ik heb een website die ik al een aantal jaar heb ontworpen.
Weinig word daar nog aan veranderd voor mijn klant, maar het is vooral om een online portfolio te hebben.
Enkel krijg ik de laatste tijd alsmaar spam binnen via het gastenboek, met IP adressen uit Rusia, Urkaine, ...



Ik heb een tijdje geleden zo'n heele reeks IP adressen geband, maar volgens mij werken ze met een proxy of VPN.
Zou dit opgelost kunnen worden met een captcha? of met een tijdslimiet van 10min tussen elke post?

Of bestaan er andere oplossingen?

Alvast bedankt.
Misschien is een controle via IP2Geo een idee, als het geen internationale bezoekers trekt? Dan kan je alleen mensen uit Nederland en België direct toelaten. De rest kan je dan een drempel geven, zoals een specifiek woord die ze moeten invullen aan de hand van een specifieke vraag.
Misschien is reCAPTCHA iets voor je.

Verder is bij een gastenboek het volgende heel erg belangrijk:

- input filtering
- output escaping

Als je wat terug bladert op dit form dan kom je gegarandeerd deze onderwerpen tegen.

Daarnaast kun je overwegen:
Moet men eerst een account aanmaken (met email verificatie) ?
Wat is de maximale lengte van een bericht ?
Moet de beheerder een bericht misschien eerst goedkeuren alvorens deze zichtbaar wordt?

[size=xsmall]Toevoeging op 04/11/2017 10:46:34:[/size]

- Ariën - op 04/11/2017 10:38:42

Misschien is een controle via IP2Geo een idee, als het geen internationale bezoekers trekt? Dan kan je alleen mensen uit Nederland en België direct toelaten. De rest kan je dan een drempel geven, zoals een specifiek woord die ze moeten invullen aan de hand van een specifieke vraag.


Klinkt als een goed idee alleen als iemand net vanaf zijn vakantie verblijf wil reageren dan heeft ie even pech..
Een account aanmaken is een grote drempel voor een eenmalige actie. En een goedkeuringscontrole kan, totdat je per dag honderden spamberichten krijgt.

Probeer selectief te controleren op landen. Maar ik geef toe: Het blijft een kat-en-muis spel.

[size=xsmall]Toevoeging op 04/11/2017 10:50:42:[/size]

@Frank: Hoezo pech? ;-)


De rest kan je dan een drempel geven, zoals een specifiek woord die ze moeten invullen aan de hand van een specifieke vraag.

>> Een account aanmaken is een grote drempel voor een eenmalige actie. En een goedkeuringscontrole kan, totdat je per dag honderden spamberichten krijgt.

Dat kan maar het ligt er een beetje aan hoe graag iemand een reactie wil plaatsen. Daarnaast kun je het aanmaken van een account heel simpel houden door enkel een mailadres te vragen en dan te verifiëren.
Wat bij mij altijd nog steeds verbazingwekkend goed werkt is een stukje javascript in je formulier zoals hieronder. In de POST check je dan of het hidden veld wel de juiste waarde heeft gekregen. Een hoop van die spammers halen gewoon de pagina op (als platte HTML), vullen de velden in, en POST-en 'm weer. Ze voeren dus geen javascript uit.

<input type="hidden" id="check" name="check" value="">
<script>
  $(function(){
    $('#check').val('random-waarde-die-ook-in-$_SESSION-staat');
  }
</script>

En dan dus in je PHP code iets van

if($_POST['check'] != $_SESSION['check']) exit();


Edit1: Wel zorgen dat $_SESSION['check'] altijd gevuld is, anders krijg je '' != '', en mogen ze alsnog door.

session_start();
if(empty($_SESSION['check'])) $_SESSION['check'] = random_string();

Edit2: En meteen dus een CSRF bescherming.
@Rob: Goed idee.

Bots hebben ook de neiging altijd alle velden in te vullen dus een extra veld in een verborgen div kan ook goed werken. Deze moet dan dus leeg zijn bij de validatie van het formulier


<style>
	.verborgen {
		display: none;
	}
</style>

<div class="verborgen">
	<input type="text" name="leeg">
</div>




[size=xsmall]Toevoeging op 04/11/2017 11:43:09:[/size]

<?php
if($_POST['leeg'] == '') {
// goed
}
Beste leden,

Mijn excuses voor het laadtijdige antwoord,
en bedankt voor jullie antwoorden.

Ik probeer dit hidden veld even, is trouwens maar een kleine moeite.
We zien heel snel of het werkt, ik hou jullie hier op de hoogte! :)

Het blokkeren van IP's, wat in wezen een blacklist is, is waarschijnlijk niet echt een oplossing, te meer omdat je zelf al aangeeft dat er constant spamberichten vanaf andere (nieuwe) IP's worden geplaatst. Een blacklist werkt eigenlijk alleen wanneer je enige garantie hebt dat je met een volledige lijst werkt. Die garantie heb je in dit geval niet.

Een (CSRF-)token invullen via JavaScript, interessant idee :). (kleine optimalisatie, wacht totdat het document geladen is? zet dit dus in een $().ready(function() { ... }); blok, zodat je zeker weet dat je hele DOM is geladen)
Een verborgen leeg veld plaatsen (volgens mij wordt dit een honeypot genoemd?) kan ook helpen.
En anders zijn er nog altijd (re)CAPTCHA-oplossingen mogelijk.
Thomas van den Heuvel op 25/11/2017 16:21:41

(kleine optimalisatie, wacht totdat het document geladen is? zet dit dus in een $().ready(function() { ... }); blok


$(function(){ ... }) is gelijk aan $().ready(...) : https://api.jquery.com/ready/ (recommended zelfs van jQ v3)

Hidden field is snel te implementeren. En je zou kunnen overwegen om simpele sommetjes op te nemen; drie + 4 =, waarbij gebruiker een antwoord moet ingeven, als veld. Als de som uitkomst niet klopt, dan heb jij er weer een niet door laten komen,

Reageren