Zjednodušenie spam ochrany
Moja nedávno vymyslená ochrana proti komentárovému spamu prešla síce zatiaľ len krátkou skúškou, ale zatiaľ funguje bez problémov. Preto som sa rozhodol trochu na nej zapracovať aj keď môj súčasný chrípkový stav mi v tom trochu bráni.
Trochu vysvetlenia ako to funguje
V HTML sa dá ako odosielacie tlačítko použiť buď <input
type="submit">, alebo <input type="image">. Pri
odosielaní pomocou <input type="image"> sa odosielajú aj
súradnice x a y kam človek klikol a to je
základ celej ochrany.
Prvotný nápad bol generovať obrázok s pozadím na určitej pozícii ktorú si niekam uložím a následne po odoslaní ju skontrolujem či človek klikol na správne miesto v obrázku. Nevýhody tohoto riešenia sú spomenuté v komentároch pod daným článkom.
- slepí človek sa ťažko trafí na farebné pozadie v obrázku
- po vypnutí zobrazovania obrázkov sa nám nezobrazí naše krásne
tlačítko, len hodnota
altak ju máme vyplnenú - ako spomenul rony vo svojom komentári tak či ide o spamera alebo o človeka sa zisťuje až po odoslaní komentára na server
- nedá sa odoslať formulár enterom (enter zasiela súradnice x=0 a y=0 presne ako spamer) toto by sa možno dalo nejako ošetriť, zatiaľ som ale neprišiel na to ako to urobiť
Za výhody by som zase označil nasledovné…
- žiadny javascript
- žiadne otravovanie opisovaním nečitateľných znakov (CAPTCHA a podobné…)
- nasadenie je dosť jednoduché
Večerné zaspávanie uvoľňuje mozog
Včera keď na hodinkách svietilo 23:42 a ja som stále nemohol kvôli chrípke zaspať ma napadla jedna možno skvelá vec, načo zisťovať kam presne klikol keď mi stačí zistiť len či niekam klikol.
Pre menej chápavých SPAMer odosiela formulár systémom ktorý mi pošle
súradnice x a y rovné nule. Stačilo by teda skontrolovať či
x!=0 a y!=0 s čoho nám jasne vyplýva, že to bude
asi človek a môžeme jeho komentár uložiť.
Ak by si to chcel niekto vyskúšať tak upozorním, že v PHP získate
súradnice x a y tak, že získate hodnoty
POST s týmto názvom $_POST['sub_x'] a
$_POST['sub_y']. Názov POSTu vzniká z hodnoty
name="sub" pri danom <input type="image"> takže
to kľudne môže byť $_POST['submit_x'] ak máte pri inpute
name="submit".
V PHP kóde kde sa ukladá komentár, stačí pridať takúto jednoduchú podmienku:
if ($_POST['sub_x'] != 0 && $_POST['sub_y'] != 0) {
// vsetko je ok, mozeme ulozit komentar
} else {
// si spamer chod prec s mojeho webu...
}
Neviem či dokážu spamovacie roboty vygenerovať hodnotu POST, aby
dokázali poslať súradnice, ale ak by k tomu prišlo tak stačí len nasadiť
generovanie obrázkov s pozadím na určitej pozícii a hneď to bude menej
priestrelné.
Pre tých čo majú problém aj s tým, že sa prítomnosť spamera zisťuje
až na strane serveru zatiaľ zostáva len jediné riešenie, použiť skrytie
formulára pomocou javascriptu.
PS: na tomto webe je to už nasadené…
Páči sa vám tento článok, zalinkujte ho:
««« Predchádzajúci text: Ochrana proti spamu v komentároch - edit
Verzia pre tlač | 8 komentárov | 1121x
Komentáre k textu
Rss komentářů tohoto textu - Formulár pre nový komentár
Pekné riešenie. Ideš ho aj odskúšať? Čo keby robotík posielal podľa mena odosielacieho tlačidla hodnoty súradníc rôzne od nuly? Je to možné?
[1] Pjotr: ty si rýchli, ešte som to ani poriadne neskontroloval a už si spomenul presne to čo som dopisoval na koniec článku 
A už som to aj nasadil na môj web, nech sa to odskúša…
[2] pmasarik: to vieš, asi sa ten Tvoj dodatok k článku dostal ku mne skôr ako do článku ;-D.
Zatiaľ to funguje na 100%… 
Takže už preniklo zopár robotov aj cez túto ochranu a navyše mnoho útokov sa dostane k odoslaniu na server, takže nezostáva nič iné ako nasadiť spomínaný JS.
