Miten luoda yksinkertainen Honeypot suojaamaan lomakkeita roskapostittajia vastaan

Tämä viesti on mielestäni lyhyt ja hyödyllinen. Tarkoituksena on esitellä yksinkertainen tekniikka, jonka avulla voit estää roskapostittajat ja botit, jotka voivat hyökätä verkkosivustosi lomakkeisiin. Tämän on tarkoitus olla ylimääräinen kerros roskapostin torjunnassa, ei tärkein resurssi. Käytä sitä muiden työkalujen kanssa, kuten re jne. Johtuen sen yksinkertaisuudesta, suosittelen todella, että noudatat tätä lomakemallia, joten koodataan:

Kuvittele, että sinulla on seuraava lomakerakenne:

<form action="/myformaction"> <label for="name">Your Name</label> <input type="text" name="name" placeholder="Your name here" required maxlength="100"> <label for="email">Your E-mail</label> <input type="email" name="email" placeholder="Your e-mail here" required></form>

Useimmat yksinkertaiset botit etsivät lomakkeen yhteisiä malleja, kuten etikettien yhteisiä nimiä, syötetiedostojen tunnuksia, syötteen yhteisiä attribuutteja, vaadittavia kenttiä ja niin edelleen. Yleisimpiä etsittäviä kenttiä ovat kentät, joiden nimi on esimerkiksi ”sähköposti, puhelin, osoite”…

Huijaamme siis tätä ja luomme yksinkertaisen honeypotin muuttamalla lomakkeemme rakennetta seuraavasti:

<style> .ohnohoney{ opacity: 0; position: absolute; top: 0; left: 0; height: 0; width: 0; z-index: -1; }</style><form action="/myformaction"> <!-- Real fields --> <label for="nameaksljf">Your Name</label> <input type="text" name="nameksljf" placeholder="Your name here" required maxlength="100"> <label for="emaillkjkl">Your E-mail</label> <input type="text" name="emaillkjkl" placeholder="Your e-mail here" required> <!-- H o n e y p o t --> <label class="ohnohoney" for="name"></label> <input class="ohnohoney" autocomplete="off" type="text" name="name" placeholder="Your name here"> <label class="ohnohoney" for="email"></label> <input class="ohnohoney" autocomplete="off" type="email" name="email" placeholder="Your e-mail here"></form>

Katsotaanpa muutoksia:

Loimme ensin luokan, jolla piilotamme asioita. Luokka .ohnohoney. Tärkeää huomauttaa joitakin asioita nyt:

  1. Ei saa käyttää display:none, jotkut botit eivät pääse kenttiin, joissa on display none, muut yksinkertaisesti tietävät, että niiden ei pitäisi täyttää display none kenttiä. Älä käytä ”hidden” luokan nimessä, jotkut kehittyneet botit voivat tunnistaa sen.

  2. Luotiin ”Todelliset kentät”. Nämä ovat näkyviä kenttiä ja niitä, joiden on oltava merkityksellisiä backendisi tietojen kannalta. Näiden kenttien tunnukset on muutettava hasheiksi. Yleisesti käytän mallia ”nameHASH” kaikki yhdessä. Älä käytä ”name-hash” tai sen muunnelmia, yksinkertainen jako paljastaisi kentän todellisen nimen. Nyt botti ei voi tunnistaa, mitä nämä kentät ovat, ne vain tietävät, että lomakkeessa on joitain kenttiä, jotka on täytettävä, ehkä ”tyypin” mukaisesti.

  3. Luomalla ”h o n e y p o t” -kentät pystymme tunnistamaan roskapostittajan. Tärkeää: Anna etiketin olla tyhjä, käytä ’ohnohoney’-luokkaa piilottaaksesi kaikki väärennetyt syötteet. Tee väärennetystä syötteestäsi mahdollisimman yksinkertainen, yleinen ja houkutteleva. Käytä yksinkertaisia ja yleisiä nimiä kuten ”sähköposti, puhelin, nimi jne.”, poista automaattinen täydennys käytöstä (joten selain ei täytä sitä), poista säännöt käytöstä, mutta säilytä tyypit.

Lomakkeessamme on nyt 2 osaa: Todelliset kentät, joissa syötteemme on suojattu hashilla ja oudoilla nimillä (voit toteuttaa hashin tai oudot nimet haluamallasi tavalla). Ja meidän honeypotimme (älä kirjoita ”honeypot”, jaa kirjaimet mieluummin, jotta vältät tunnistamisen). Nyt backendissäsi:

  1. Verify if any of the ”h o n e y p o t” fields came filled. Jos kyllä, onneksi olkoon, sait roskapostin ansaan. Useimmat niistä täyttävät kaikki nämä kentät erottelematta niitä. Joten sinun tarvitsee vain tarkistaa, onko jokin ”h o n e y p o t” -kentistäsi tullut täytetyksi, jos kyllä, se on roskapostia. Jos haluat, voit tehdä tämän tarkistuksen asiakkaalla, jos kyseessä on ajax-lomake, jolloin vältytään käyttämästä palvelimen resursseja käyttökelvottomien tietojen laskemiseen (mutta säilytetään backend-validointi joka tapauksessa). Kun havaitset roskapostin, älä vain lähetä tietoja ja tee niillä mitä haluat. Jos nimet, kuten ”sähköposti, puhelin jne.”, ovat tärkeitä backendillesi, siirrä nimet vain matriisien avulla.

Tässä on yhden tiedoston repo, jossa on yksinkertainen toteutus tästä tekniikasta:
https://github.com/felippe-regazio/php-honeypot-example

Muista: tämä on vain yksinkertainen kerros hyökkäysten estämiseksi yksinkertaisella tavalla, jotkin tekniikat pystyvät tunnistamaan jopa nämä kuviot, joten käytä kaikkia mahdollisia aseita sitä vastaan. Uskon kuitenkin, että tällä yksinkertaisella kuviolla voidaan välttää ainakin 50 % roskaposteista verkkosivuillasi.