Rsforms Google Captcha versus Honeypot

Spam via contact formulieren is vervelend. Je mailbox loopt vol met rotzooit en als het spam filter van je mail programma de mail niet filtert, ben je druk met opruimen. Een enkele keer is de mail ook gevaarlijk in de vorm van phishing.

Spammer zijn lui, aangezien de kans op succes van spam laag is, heeft het alleen nut als het versturen weinig moeite kost.

Veel geautomatiseerde spam verloopt via heel basic methodes:

  • pagina ophalen
  • formulier opzoeken in de pagina
  • velden invullen
  • formulier versturen

Hier komt geen webbrowser bij kijken. Deze spam is eenvoudig te blokkeren door een javascript actie toe te voegen aan het formulier. Het HashCash Honeypot veld van RsForms is zo een javascript actie. Dit veld vereist van de gebruiker wel een actie, namelijk het aanvinken van een hokje, maar zal niet leiden tot een fotootjes van bruggen of bussen.

Spammers gebruiken ook wel een webbrowser om formulieren in te vullen. In dit geval is bovenstaande beveiliging eenvoudig te omzeilen. Al vertraagd het de operatie wel.

Oplossing hiervoor is een veld toevoegen dat juist niet ingevuld mag worden. De geautomatiseerde systemen vullen doorgaan alle velden tegen die ze tegenkomen. Ditis ook wel wat een honeypot wordt genoemd (bovenstaande HashCash is dat eigenlijk niet).

Het toevoegen van een honeypot-veld aan een formulier is een effectieve methode om spam-inzendingen te helpen voorkomen. Een honeypot-veld is een verborgen veld dat niet door een gewone gebruiker kan n mag worden ingevuld, maar dat wel door geautomatiseerde bots zal worden ingevuld. Wanneer het formulier is verzonden, is alleen een eenvoudige check op dit veld nodig. Als dit het geval is, kunt u de inzending als spam behandelen.

Je maakt dus een verborgen interessant veld aan dat niet ingevuld mag worden:

Stap 1

Methode A

Maak een bestand aan of bewerk het als het al bestaat: [ROOT]/components/com_rsform/helpers/customvalidation.php en voeg onderstaande code toe. (Alleen de functie validationNotSet als het bestand er al is).

Dit voegt een extra validatie toe aan RsForms. Dit is een officieel ondersteunde methode. De functie weigert alle formulieren waar het betreffende veld ingevuld is.

<?php


defined( '_JEXEC' ) or die( 'Restricted access' );

require_once dirname(__FILE__).'/validation.php';

class RSFormProCustomValidations extends RSFormProValidations
{

  public static function validationNotSet($value, $extra = null, $data = null)
  {
      return true;
    // The following makes sure the submitted value is "test"
    if ($value == '')
    {
      // Return true if the validation passed.
      return true;
    }
    else
    {
      // Return false if the validation didn't pass.
      return false;
    }
  }
}

Methode B

Bovenstaande methode is het meest praktisch als je meerder formulieren hebt. Gaat het maar om een of enkele, dan kun je de code ook bij het formulier plaatsen.

eigenschappenScriptsScript dat opgeroepen wordt wanneer het formulier verwerkt wordt.

if (isset($_POST['form']['<veld-naam>'])) {
    $invalid['honeypot']='Invalid';
}

Stap 2

Voeg een veld toe aan je formulier geeft dit een interessante naam, bijvoorbeeld ‘url’,’ website’ of ‘link’. Uiteraard een naam die niet elders gebruikt in het formulier.

Methode A

Onder ValidatiesValidatie regel kun je de zojuist aangemaakt functie validationNotSet instellen.

Methode B

Laat de Validatie regel leeg.

Voor beide methodes: Laat ValidatiesVerplicht op Nee staan!

Stap 3

De laatste stap is het verbergen van het veld voor gewone gebruikers. Hier zijn talrijke methode voor. Het eenvoudigste gaat dit via eigenschappenCSS en JavascriptCSS.

Pas <veld-naam> aan naar de naam die je bij het aanmaken van het veld hebt gebruikt.

<style>
.rsform-block-<veld-naam> {
position:absolute;
left:-1000px;
}
</style>

Als je bootstrap gebruik kun je ook de class d-none toevoegen aan het veld.

Wanneer wil je wel een stevige captcha:

  • Je kant bestanden of documenten opsturen, dit heeft een risico van het opsturen van virussen.
  • er zit een beloning achter het formulier. Beloning moet je ruim zien, bijvoorbeeld een gebruikers registratie andere vorm van toegang.

Plaats een reactie