Spam in gastenboek

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Keven Vanovertveldt

Keven Vanovertveldt

04/11/2017 10:29:31
Quote Anchor link
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, ...

Afbeelding

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
 
PHP hulp

PHP hulp

26/12/2024 12:02:59
 
- Ariën  -
Beheerder

- Ariën -

04/11/2017 10:38:42
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/11/2017 10:44:18
Quote Anchor link
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?

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..
 
- Ariën  -
Beheerder

- Ariën -

04/11/2017 10:48:10
Quote Anchor link
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.

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/11/2017 11:00:41
Quote Anchor link
>> 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.
 
Rob Doemaarwat

Rob Doemaarwat

04/11/2017 11:13:20
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>

En dan dus in je PHP code iets van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_POST['check'] != $_SESSION['check']) exit();


Edit1: Wel zorgen dat $_SESSION['check'] altijd gevuld is, anders krijg je '' != '', en mogen ze alsnog door.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
session_start();
if(empty($_SESSION['check'])) $_SESSION['check'] = random_string();

Edit2: En meteen dus een CSRF bescherming.
Gewijzigd op 04/11/2017 13:58:28 door Rob Doemaarwat
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/11/2017 11:40:50
Quote Anchor link
@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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<style>
    .verborgen {
        display: none;
    }
</style>

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




Toevoeging op 04/11/2017 11:43:09:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if($_POST['leeg'] == '') {
    // goed
}
Gewijzigd op 04/11/2017 11:41:13 door Frank Nietbelangrijk
 
Keven Vanovertveldt

Keven Vanovertveldt

25/11/2017 11:50:26
Quote Anchor link
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! :)
Gewijzigd op 25/11/2017 11:51:06 door Keven Vanovertveldt
 
Thomas van den Heuvel

Thomas van den Heuvel

25/11/2017 16:21:41
Quote Anchor link
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.
 
Rob Doemaarwat

Rob Doemaarwat

25/11/2017 21:42:40
Quote Anchor link
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)
 
Jan te Pas

Jan te Pas

25/11/2017 22:14:24
Quote Anchor link
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,
 
Keven Vanovertveldt

Keven Vanovertveldt

28/11/2017 20:14:43
Quote Anchor link
Ik heb dit hidden veld toegepast en tot nu toe geen spam.
Als ik merk dat er met tijd toch spam in komt dan los ik dit op met een rekensommetje.

Dank voor de hulp.
 
- Ariën  -
Beheerder

- Ariën -

28/11/2017 20:27:52
Quote Anchor link
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. CSRF-beveiliging zou overigens ook niet onbelangrijk zijn.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.