Cum să creați un Honeypot simplu pentru a vă proteja formularele împotriva spammerilor
Cred că această postare va fi scurtă și utilă. Scopul aici este de a demonstra o tehnică simplă pentru a vă ajuta să blocați spammerii și roboții care ar putea ataca formularele site-ului dumneavoastră. Acest lucru a fost menit să fie un strat suplimentar în prevenirea spam-ului, nu principala resursă pentru. Folosiți-o împreună cu alte instrumente precum re, etc. Datorită simplității sale, vă recomand cu adevărat să urmați acest model de formular, așa că haideți să codificăm:
Imaginați-vă că aveți următoarea structură de formular:
<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>
Majoritatea roboților simpli vor căuta modele comune de formulare, cum ar fi nume comune de etichete, ID-uri de intrare, atribute comune de intrare, câmpuri obligatorii etc., iar apoi robotul le va completa cu informații false pentru a încerca să vă trimită vouă și clienților voștri spam-uri sau unele coduri malițioase. Cele mai comune câmpuri de căutat sunt câmpurile numite ca „email, telefon, adresă”…
Așa că, haideți să trișăm și să creăm un simplu honeypot schimbând structura formularului nostru în:
<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>
Să vedem modificările:
În primul rând am creat o clasă pentru a ascunde lucrurile. Clasa .ohnohoney. Important să punctăm câteva lucruri acum:
-
Nu folosiți display:none, unii roboți nu pot accesa câmpurile cu display none, alții pur și simplu știu că nu ar trebui să umple câmpurile cu display none. Nu folosiți „hidden” în numele clasei, unii roboți avansați îl pot recunoaște.
-
Atunci am creat „Real fields”. Acestea sunt câmpurile vizibile și cele care trebuie să fie relevante pentru backend-ul dvs. în ceea ce privește datele. Aceste câmpuri trebuie să aibă identificările schimbate în hașuri. În mod obișnuit folosesc modelul „nameHASH” la un loc. Nu folosiți „name-hash” sau variații ale acestuia, o simplă divizare ar expune numele real al câmpului. Acum, un robot nu poate recunoaște ce sunt aceste câmpuri, el știe doar că formularul are niște câmpuri care trebuie completate, poate urmând „type” ca model.
-
Creând câmpurile „h o n e y p o t” vom putea identifica Spammerul. Important de: Lăsați eticheta goală, folosiți clasa „ohnohoney” pentru a ascunde toate aceste intrări false. Transformă-ți intrările false în intrări cât mai simple, generice și atractive posibil. Folosiți nume simple și comune, cum ar fi „e-mail, telefon, nume, etc.”, dezactivați autocompletarea (astfel, browserul nu îl va completa), dezactivați regulile, dar păstrați tipurile.
Acum avem 2 părți în formularul nostru: Câmpuri reale cu intrările noastre protejate de hașuri și nume ciudate (puteți implementa hașurile sau numele ciudate după cum preferați). Și honeypot-ul nostru (nu scrieți „honeypot”, preferați să împărțiți literele pentru a evita orice recunoaștere). Acum, în backend-ul vostru:
- Verificați dacă vreunul dintre câmpurile „h o n e y p o t” a venit umplut. Dacă da, felicitări, ați prins un spam. Cele mai multe dintre ele vor umple toate aceste câmpuri fără să le diferențieze. Deci, tot ce trebuie să faceți este să verificați dacă vreunul dintre câmpurile „h o n e y p o t” a fost completat, dacă da, este un spam. Dacă preferați, puteți face această verificare pe client, în cazul unui formular ajax, ceea ce va evita utilizarea resurselor serverului pentru a calcula date nefolositoare (dar, oricum, păstrați validarea din backend). Când prindeți un spam, pur și simplu nu trimiteți datele și faceți ce doriți cu ele. Dacă nume precum „email, telefon, etc.” sunt importante pentru backend-ul dvs., transcrieți doar numele folosind array-uri.
Iată un repo cu un singur fișier cu o implementare simplă a acestei tehnici:
https://github.com/felippe-regazio/php-honeypot-example
Rețineți: acesta este doar un strat simplu pentru a preveni atacurile într-un mod simplu, unele tehnologii pot identifica chiar și aceste modele, așa că folosiți toate armele pe care le puteți împotriva lor. Dar cred că acest tipar simplu poate evita cel puțin 50% din spams în pagina dvs. web.