Maandagavond 3 september. Onder het genot van een lekker Kölsch biertje Copycat van Two Chefs Brewing wachten we op de deelnemers van de maandelijkse JUG073. Vandaag voornamelijk aan de slag met RSForm Pro Honeypot methode en wellicht ook nog wat aan de website Kollekebier.nl.  

RSForm Pro - Honeypot - wat is dat nou weer?

Het kan voorkomen dat je via de formulieren van je website spam inzendingen ontvangt. Dit zijn inzendingen waar je niet op zit te wachten, en veelal gevuld met onbedoelde adviezen over je lichaam, bruidjes uit verre landen en andere meuk. Deze inzendingen ben je liever kwijt dan rijk. Deze inzendingen worden mogelijk gevuld door scripts die het web afstruinen op formulieren in om te zenden. 

De inzendingen kun je voorkomen door het toevoegen van praktisch onleesbare Captcha codes, reCaptcha van Google, betaalde oplossingen van Akismet en meer. Captcha en reCaptcha vragen weer een extra handeling van de inzender, hetgeen niet gebruikersvriendelijk is voor de niet-spam inzenders en centen proberen we juist niet uit te geven. 

Middels RSForm Pro is het vrij eenvoudig om middels de Honeypot methode spaminzendingen tegen te gaan. Deze methode komt er op neer dat je een textveld toevoegt welke niet zichtbaar is voor de normale bezoeker, maar wel gelezen en hopelijk ook gevuld wordt door de geautomatiseerde scripts. Zodra het veld gevuld is weten we dat het geen normale bezoeker is en kunnen we de inzending blokkeren. En zo lossen we de spam inzendingen op. Klinkt simpel, maar op deze manier houden we voor een tijdje de geautomatiseerde tools wel even zoet. 

Hieronder twee methodes om de Honeypot in te regelen:

methode 1 - invisible captcha field

  • ga via Joomla backend naar Componenten > RSForm Pro > Beheer formulieren en open het formulier welke je wil voorzien van een Honeypot
  • voeg een nieuw veld (type = Captcha Antispam)
  • geef dit veld een "Name" welke aansluit bij de strekking van het formulier. 
    • bijvoorbeeld voor contactformulier: veldnaam = vraag
    • bijvoorbeeld voor bestelformulier: veldnaam = ordercomment
    • door het opgeven van een logische naam lijkt het voor de scriptjes niet alsof het om een honeypot gaat
  • laat het veld "Caption" leeg
  • selecteer op tabblad Attributes het veld "Image Generation" = invisible
  • bewaar de wijzigingen

Op de voorzijde van de website zal het nieuwe veld niet zichtbaar zijn. Dat is precies de bedoeling. Het veld is overigens wel terug te vinden in de bron van de pagina. (rechtermuisknop > bekijk bron > zoek op de opgegeven veldnaam)

Het formulier kan ingezonden worden als het verborgen veld niet gevuld wordt en alle andere verplichte velden wel. Het formulier zal niet verzonden worden als het verborgen veld en alle andere verplichte velden wel gevuld zijn. 

Wat ons opviel is dat na de eerste mislukte inzending het verborgen veld geleegd wordt en dat het formulier dan alsnog ingezonden kan worden. Deze methode is daarom voor ons minder geschikt.

methode 2 - invisible text veld met eigen script

Voor deze methode zijn twee stappen nodig:

  1. aanmaken textveld
  2. instellen script

Aanmaken tekstveld

  • ga via Joomla backend naar Componenten > RSForm Pro > Beheer formulieren en open het formulier welke je wil voorzien van een Honeypot
  • voeg een nieuw veld toe (type = textbox)
  • geef dit veld een "Name" welke aansluit bij de strekking van het formulier.
    • bijvoorbeeld voor contactformulier: veldnaam = vraag
    • bijvoorbeeld voor bestelformulier: veldnaam = ordercomment
    • door het opgeven van een logische naam lijkt het voor de scriptjes niet alsof het om een honeypot gaat
  • laat het veld "Caption" leeg
  • ga naar het tabblad Attributes en vul bij "Additional attributes" style="display:none"
  • bewaar de wijzigingen

Opmerking: we hebben er voor gekozen om display:none toe te passen en niet text-indent:-9999em of javascript. Bij eerstgenoemde zullen de screenreaders het veld wel zien en wordt het inzenden van het formulier voor mensen met een screenreader onmogelijk gemaakt. Bij laatstgenoemde zal het veld in beeld verschijnen bij mensen die geen javascript toestaan in de browser. 

Instellen script

Op moment het verborgen veld gevuld is en het formulier wordt ingezonden, dan willen we deze inzending niet ontvangen. Boefjes als we zijn willen we de inzender doorsturen naar een andere website. bijvoorbeeld https://honingpot.nl/

Deze actie moet plaatsvinden op moment dat het formulier verzonden wordt. 

  • Ga bij het huidige formulier naar het tabblad "Form Properties" en dan naar "PHP Scripts > Script called on form process"
  • Vul daar het volgende script:
    if ($_POST['form']['vraag'] !== '')
    {
    	header('Location: https://honingpot.nl/');
    	die;  
    }
  • "vraag" is de naam van het veld welke je gebruikt hebt als verborgen veld
  • "header('Location:" is de pagina waar je de inzender naar toe wil leiden
  • Het toevoegen van die; of exit; aan na de header.location is belangrijk om te voorkomen dat Joomla de header.location voortijdig nog tracht te wijzigen naar de bedankpagina.  

update woensdag 5 september

  • Veld aangemaakt met naam = vraag
  • Ga naar _Form Properties > CSS and Javascript > CSS_ en vul in:
    
    <style>
    .rsform-block-vraag {
      display:none;
      visibility:hidden;
    }
    </style>
    
  • Ga naar _Form Properties > PHP Scripts > Script called on form process_ en vul in:
    
    /**
     * https://webaim.org/blog/spam_free_accessible_forms/
     */
    $spam = false;
    
    // Detect form elements for the most common header injections and other code
    if (preg_match( "/bcc:|cc:|multipart|\[url|Content-Type:/i", implode($_POST))) 
    {
        $spam=true;
    }
    
    // Detect more than 3 outgoing links
    if (preg_match_all("/<a|http:/i", implode($_POST), $out) > 3) 
    {
        $spam=true;
    }
    
    // Detect content within a hidden form element
    if( !empty($_POST['email']))
    {
      $spam = true;
    }
    
    // Ensure the form is posted from your server
    if((isset($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))) {
        $spam=true;
    }
    
    // Sent spammer to somewhere else
    if ($spam) 
    {
      header('Location: https://honingpot.nl/');
      die;  
    }
  • In plaats van spammer naar elders te sturen kun je ook print "";die; toepassen om verdere uitvoering van het script te stoppen. Of... je kunt de spammer met header Location ook naar je homepage sturen... dan blijft de spammer op dezelfde pagina, maar zou de indruk kunnen krijgen dat spam actie gelukt is.

upload_max_filesize

Tijdens de installatie van RSForm Pro liepen we tegen een door de hostingprovider ingestelde limiet aan. De te installeren versie van RSForm Pro overschrijdt de max ingestelde filesize om te uploaden. De huidige waarde kun je controleren via "Systeem > Systeeminformatie > PHP Informatie". Zoek aldaar op "upload_max_filesize".

Deze instelling kun je ophogen via php.ini, maar normaliter heb je hier geen authorisatie voor. Overrulen van deze instelling via .htaccess is soms ook mogelijk. Voeg bovenaan de .htaccess in de root van je Joomla site het volgende toe:

php_value upload_max_filesize 16M

Controleer na deze wijziging wederom de PHP Informatie om te zien of de wijziging succesvol was.

Dokter Joomla!

  • Hoe kom ik rechts in de Google zoekresultaten met een eigen plaatje in beeld?
    Deze vraag met betrekking op structured data kan een hele JUG bijeenkomst beslaan. Maar in het kort: zorg er voor dat je je bedrijf aangemeld hebt via https://business.google.com/locations. Foto's kun je dan ook via daar wijzigen.
  • Google Analytics kan veel... kan ik een kort verslag in mijn Joomla backend zien?
    Ja hoor... de extensie Google Analytics Dashboard biedt je de mogelijkheid om een GA weergave in het dashboard van Joomla backend te tonen.

Cronjob

Tijdens de bijeenkomst van augustus had vaste bezoeker aan JUG073 een issue met uitvoering van eigen cronjobs. De link naar Stackoverlow bood hulp. Maar ook Joomla zelf kan van dienst zijn. De files in de cli-directory boden voldoende informatie om verder te kunnen. 

RSForm!Pro Dag

Speciale aandacht voor de RSForm!Pro zaterdag 20 oktober in Rotterdam. Meer informatie op rsformprodag.nl

De volgende keer

Maandag 8 oktober, anders dan anders, is de volgende bijeenkomst van Joomla Gebruikersgroep 's-Hertogenbosch. De datum is een week verschoven in verband met werkzaamheden aan de kroeg.

2 reacties

EasyDiscuss Avatar
Houten JPM
Dank voor het verslag, kunnen we het nog eens rustig nalezen en uitproberen. Het was een top-avond met veel interessante zaken!
EasyDiscuss Avatar
Jos Bogers
Hans, interessant. Op het laatste moment is er wat tussen gekomen, daar heb ik dit keer zeker spijt van. Bedankt voor het verslag.
Jos

Reageer

1000 Resterende tekens