Förhindra skräppost i vilket webbformulär som helst



  • Spam

    Att bekämpa spam är en av de oändliga uppgifterna för oss alla webbutvecklare. Lyckligtvis har de flesta e-postleverantörer blivit intelligenta nog för att gömma det mesta för oss. Men vad händer när robotar börjar attackera din eller kunders kontaktformulär på webben? Till din e-postleverantör kommer det att se ut som legitima inlägg från dina kunder, men det är detsamma som all annan skräppost man får ta del av.

    Att lägga till någon form av mänsklig verifiering till dina formulär kan hjälpa till att eliminera eventuell skräppost. Det bästa och enklaste att använda för detta är enligt mig Googles kostnadsfria reCAPTCHA-tjänst. Jag kommer nedan beskriva hur man lägger in detta på någon av dina webbplatser.

    1. Registrera din webbsida på Googles reCAPTCHA
    2. Google kommer att generera to nycklar åt dig, en publik och privat. Den publika nyckeln är inte hemlig och kan ligga öppet för alla att se medans den privata ska du hålla hemlig. Du måste generera egna nycklar men här har du 2 nycklar för detta exempel.
    Site key: 6LeySRIUAAAAAJnYn_JKQ5i2UfH85wKA-YgSYACL
    Secret key: 6LeySRIUAAAAAM5d5huz1-SIW4OMjfgDx_pwfToe
    
    1. För att lägga till reCAPTCHA till ditt formulär så behöver du detta inom <form> taggarna.
    <!-- The script should ideally be in your <head> tag, but it still works if it's here -->
    <script src='https://www.google.com/recaptcha/api.js'></script>
    <div class="g-recaptcha" data-sitekey="6LeySRIUAAAAAJnYn_JKQ5i2UfH85wKA-YgSYACL"></div>
    
    1. För att man ska kunna verifiera att besökaren har klickat på reCAPTCHA korrekt så måste man göra en förfrågan mot Google. Jag använder mig av PHP, men om du är en utvecklare så kan du använda vilket språk som helst.
    $siteverify = 'https://www.google.com/recaptcha/api/siteverify';
    $args = array(
        'remoteip' => $_SERVER['REMOTE_ADDR'],
        'response' => $_POST['g-recaptcha-response'],
        'secret' => '6LeySRIUAAAAAM5d5huz1-SIW4OMjfgDx_pwfToe'
    );
    $recaptcha = json_decode(file_get_contents($siteverify.'?'.http_build_query($args)), true);
    if(isset($recaptcha['success']) && $recaptcha['success'] == 1) {
        $captcha = true;
    } else {
        $captcha = false;
    }
    

    Bara att fylla i dina nycklar istället för de i exemplet så skall det fungera. Om du använder dig av Cloudflare så rekommenderar jag att du kör med $_SERVER['HTTP_CF_CONNECTING_IP'] istället för $_SERVER['REMOTE_ADDR']. Annars så får du inte korrekt ip i verifieringen.

    Om ni vill se hur det kan se ut så gå till min startsida och tilla längst ner. Hoppas detta kommer att hjälpa er lika mycket som det har hjälpt mig. Om ni inte kan utveckla så kan ni alltid anlita mig att göra det åt er 😉



  • Honeypot-tekniken

    Om man inte vill mecka med Googles reCAPTCHA så kan man använda sig av honeypot-tekniken eller båda om man känner för det. Själv så kör jag bara reCAPTCHA 😉

    Honeypot-tekniken är ett snabbt och effektivt sätt att förhindra bottar från att skicka skräppost in dina formulär. Spam-bottar älskar formfält och när de möter ett formfält fyller de ut detta, även om fältet är dolt från användargränssnittet. För att utnyttja detta kan du skapa ett formulärfält som ska lämnas tomt, men göm det från mänskliga användare. När formuläret skickas kan du kontrollera om det finns ett värde för fältet och blockera meddelandet.

    Lägg bara till ett extra input-fält i formuläret och dölj det med display:none. När du sedan ska hantera informationen i PHP så kollar du bara ifall det finns något värde i detta input-fält och kastar informationen ifall det finns ett värde.


 

Jenkler IT AB org.nr: 559082-6938   073-731 76 64   [email protected]

Ser ut som din anslutning till Jenkler IT AB gick förlorad, vänta medan vi försöker att återansluta.