Spam in gastenboek
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.
Gewijzigd op 04/11/2017 10:58:55 door Keven Vanovertveldt
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.
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?
Toevoeging op 04/11/2017 10:46:34:
Klinkt als een goed idee alleen als iemand net vanaf zijn vakantie verblijf wil reageren dan heeft ie even pech..
Misschien is 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?
Toevoeging op 04/11/2017 10:46:34:
- 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..
Probeer selectief te controleren op landen. Maar ik geef toe: Het blijft een kat-en-muis spel.
Toevoeging op 04/11/2017 10:50:42:
@Frank: Hoezo pech? ;-)
Quote:
De rest kan je dan een drempel geven, zoals een specifiek woord die ze moeten invullen aan de hand van een specifieke vraag.
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.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<input type="hidden" id="check" name="check" value="">
<script>
$(function(){
$('#check').val('random-waarde-die-ook-in-$_SESSION-staat');
}
</script>
<script>
$(function(){
$('#check').val('random-waarde-die-ook-in-$_SESSION-staat');
}
</script>
En dan dus in je PHP code iets van
Edit1: Wel zorgen dat $_SESSION['check'] altijd gevuld is, anders krijg je '' != '', en mogen ze alsnog door.
Edit2: En meteen dus een CSRF bescherming.
Gewijzigd op 04/11/2017 13:58:28 door Rob Doemaarwat
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
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<style>
.verborgen {
display: none;
}
</style>
<div class="verborgen">
<input type="text" name="leeg">
</div>
.verborgen {
display: none;
}
</style>
<div class="verborgen">
<input type="text" name="leeg">
</div>
Toevoeging op 04/11/2017 11:43:09:
Gewijzigd op 04/11/2017 11:41:13 door Frank Nietbelangrijk
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! :)
Gewijzigd op 25/11/2017 11:51:06 door Keven Vanovertveldt
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,
Als ik merk dat er met tijd toch spam in komt dan los ik dit op met een rekensommetje.
Dank voor de hulp.
CSRF-beveiliging zou overigens ook niet onbelangrijk zijn.
Je kan de drempel ook weer verlagen met geo-locaties. Zodat je iedereen in de betrouwbare landen enkel een hidden field meegeeft. De landen met de meeste spammers kan je een captcha meegeven of het gastenboek helemaal mee blokkeren.