Hogyan hozzunk létre egy egyszerű Honeypotot, hogy megvédjük az űrlapjainkat a Spammers ellen
Úgy gondolom, hogy ez a bejegyzés rövid és hasznos lesz. A célom az, hogy bemutassak egy egyszerű technikát, amely segít blokkolni a spammereket és botokat, amelyek megtámadhatják a weboldalad űrlapjait. Ez azt jelentette, hogy egy extra réteg a spam megelőzés, nem a fő erőforrás, hogy. Használja egy másik eszközzel, mint a re, stb. Mivel az egyszerűség, én tényleg ajánlom, hogy kövesse ezt az űrlap mintát, így, hadd kód:
Képzeljük el, hogy van a következő űrlap szerkezet:
<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>
A legtöbb egyszerű botok keresni fogja űrlap közös minták, mint a címke közös nevek, input azonosítók, input közös attribútumok, kötelező mezők, stb, és akkor a bot töltse ki őket hamis információ, hogy megpróbálja küldeni, és az ügyfelek, spam vagy néhány rosszindulatú kódokat. A leggyakoribb keresendő mezők az olyan nevű mezők, mint az “email, telefon, cím”…
Szóval, csaljunk, és hozzunk létre egy egyszerű mézesmadzagot, megváltoztatva az űrlap szerkezetét:
<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>
Lássuk a változásokat:
Először létrehoztunk egy osztályt a dolgok elrejtéséhez. A .ohnohoney osztályt. Fontos most rámutatni néhány dologra:
-
Ne használjunk display:none-t, egyes botok nem tudnak hozzáférni a display none mezőkhöz, más egyszerűen tudja, hogy nem szabad kitölteni a display none mezőt. Ne használjuk a “hidden” szót az osztály nevében, néhány fejlett bot felismeri.
-
Majd létrehoztuk a “valódi mezőket”. Ezek a látható mezők, és azok, amelyeknek a backend szempontjából relevánsnak kell lenniük az adatok szempontjából. Ezeknek a mezőknek az azonosítóit hash-okra kell változtatni. Általában a “nameHASH” mintát használom az egészet. Ne használd a “name-hash” vagy ennek variációit, egy egyszerű felosztás felfedné a mező valódi nevét. Most egy bot nem tudja felismerni, hogy mik ezek a mezők, csak azt tudja, hogy az űrlapon van néhány mező, amit ki kell tölteni, esetleg a “type” mintát követve.
-
A “h o n e y p o t” mezők létrehozásával képesek leszünk azonosítani a Spammereket. Fontos, hogy: Hagyja üresen a címkét, használja az ‘ohnohoney’ osztályát, hogy elrejtse az összes hamis bemenetet. A lehető legegyszerűbb, legáltalánosabb és legvonzóbb legyen a hamis bemenet. Használjon egyszerű és gyakori neveket, mint “email, telefon, név, stb.”, tiltsa le az automatikus kitöltést (így a böngésző nem fogja kitölteni), tiltsa le a szabályokat, de tartsa meg a típusokat.
Most már 2 rész van az űrlapunkban: Valódi mezők a hash-okkal és furcsa nevekkel védett bemeneteinkkel (a hash-okat vagy a furcsa neveket tetszés szerint implementálhatod). És a mézesmadzagunk (ne írjuk ki, hogy “mézesmadzag”, inkább osszuk fel a betűket, hogy elkerüljük a felismerést). Most a backendben:
- Verify if any of the “h o n e y p o t” fields came filled. Ha igen, gratulálok, csapdába ejtettél egy spam-et. A legtöbbjük az összes ilyen mezőt kitölti anélkül, hogy megkülönböztetné őket. Tehát csak annyit kell tennie, hogy ellenőrizze, hogy a “h o n e y p o t” mezők közül bármelyik kitöltésre került-e, ha igen, akkor spam. Ha szeretné, ezt az ellenőrzést elvégezheti a kliensen is, ajax űrlap esetén, így elkerülheti, hogy a szerver erőforrásokat használjon a nem hasznos adatok kiszámítására (de a backend érvényesítés mindenképpen megmarad). Ha spamet kapunk, egyszerűen ne küldjük el az adatokat, és azt csinálunk vele, amit akarunk. Ha az olyan nevek, mint az “email, telefon, stb.” fontosak a backended számára, csak írd át a neveket tömbökkel.
Itt van egy egyfájlos repo ennek a technikának egy egyszerű implementációjával:
https://github.com/felippe-regazio/php-honeypot-example
Ne feledd: ez csak egy egyszerű réteg a támadások egyszerű megelőzésére, egyes technológiák még ezt a mintát is képesek felismerni, ezért használj ellene minden lehetséges fegyvert. De úgy gondolom, hogy ezzel az egyszerű mintával a spamek legalább 50%-a elkerülhető a weboldaladon.