Autor | Zpráva | ||
---|---|---|---|
dehtak Profil |
Jelikoz mam alergii na captchu rozhod jsem se udelat antibot bez pouziti captchi a chtel bych se s vami o to podelit.
Kody budu psat zkracene jen aby jste pocchopily jak to pracuje. Udelate si prvne nejaky html formular do <form> nezadavejte zadny action a misto tlacitka input submit pouzijte button a zakazte autocomlete. Uzivatel musi vyplnovat formular rucne , pokud bude pouzivat ctrl+V bude dekovan jako bot. Takze do formulare napiste upozorneni aby uzivatel opravdu vyplnoval rucne formular. Ted prez jquery budeme pocitat pocet stisknutych klaves, pokud uzivatel bude vyplnovat formular $("form input").each(function({ $(this).keypress(function(){ zavolame funkci nebo tridu ktera bude pripocitavat }) })) samozrejme pri nacteni nove stranky se pocitadlo musi vynulovat
V php si vytvorime sezion $_SESSION[nahoda_1] = funkce_vygenerovani nahodnych pismen a a cisel(); a predame javascriptu klidne do java scriptu napiste var nahoda = <?=$_SESSION['nahoda_1']?> script muzete volat treba script.js.php A nebo muzete sezion vypsat do input type hidden a ziskat jeho data pomoci $('#nahoda').val(); tato nahoda bude v adrese pro ajax po kazdem nacteni stranky musi byt jina to aby se to fuckerum trosku ztizilo po stisknuti tlacitka button se odesle ajax $('button').click(function){ $.ajax({type: "POST",url: "/adresa/vygeneruj_action_adresu/",data: "count="+pocitadlo_keypress_get()+"&nahoda="+nahoda ,dataType:"json", success: function (data) { ted to tady osetrite pokud php odesle chybovou zpravu tak ji vypisete alertem nebo neco pokud ne tak zadate formu action vygenerovanou adresu a odeslete formular $('form').attr('action',data.url); $('form').submit(); }) }) v php napisete $return['msg'] =NULL; $return['url'] =NULL; if ($_POST['count'] >=25){ if ($_POST['nahoda']==$_SESSION['nahoda_1']){ $_SESSION['nahoda_1']=''; // vymazeme sezion $_SESSION['nahoda_2']= funkce_nahody(); $return['url'] = "/adresa_webu/odeslat/".$_SESSION['nahoda_2']."/"; /* nebo "adresa/odeslat?nahoda=".$_SESSION['nahoda_2'] // ja pouzivam v mym frameworku routovani takkze to mam spis jako adresu ktera vypada asi takto http://neco.cz/formular/odeslat/h54gfhf45fg5gf546df5 pokud nebudete pouzivat routovani udelejte si adresu takto http://neco.cz/formular/odeslat?nahoda=h54gfhf45fg5gf546df5 */ }else{ $return['msg']="byl jste detekovan jako bot"; } }else{ $return['msg']="byl jste detekovan jako bot"; } echo jsoun_encode($return); a v php pro odeslani formulare si to zase osetrite pokud $routa == $_SESSION['nahoda_2'] nebo pokud $_GET['nahoda']==$_SESSION['nahoda_2'] odesle formular , vymazeme sezion a pokud se nerovna dame die() nebo nic a nebo vypiseme zpravu, formular lze poslat pouze jednou vratte se zpet na formular a vyplnte jej znovu.
Takze doufam ze jste me pochopily. Lepsi napsat cast kodu strcne nez to slozite vysvetlovat. Pokud mate naky otazky nebo pripominky napiste , diky |
||
juriad Profil |
#2 · Zasláno: 8. 12. 2014, 12:46:56
dehtak:
Nefunguje to bez JS. Tedy captchu (nebo jiný mechanismus) bys měl použít, ale pomocí JS ji jen skrýt a použít nějakou méně iritující metodu. Uvažoval jsi o tom, že lidé mohou formulář vyplnit bez klávesnice? Existují doplňky, které vyplní e-mail, adresu, telefon, přihlašovací údaje kliknutím myši. Uživatel také může hodnoty vložit ze schránky. Položka se z pole nemaže pomocí přiřazení prázdného řetězce. Nepřijde ti divné posílat dva requesty, když stačí jen jeden? Přece spolu s prvním můžeš poslat i data z formuláře a podle podmínky je zpracovat nebo odmítnout. Prosím tě piš buď anglicky session nebo česky sezení, a nic mezi tím. |
||
dehtak Profil |
pisu jak pisu, neni cas sem tak zvyklej
to ze to za ne vyplnuje neco jineho je jejich blbost, psal jsem ze musite napsat upozorneni aby uzivatel vyplnoval formular rucne. Jde to udelat i s jednim requestem pouzil jsem ale 2 aby se to trosku ztizilo cim vic zamotany tim mensi sance ze vam nekdo bude odesilat sracky S jednim requestem mate ale adresu s odeslanim uz vygenerovanou a pokud nejakej bot vyplni formular a odesle a vrati se zpet na formular tak to muze zase odeslat znovu ten keypress si muze totiz osetrit nebo preskocit proto 2 requesty abych adresu odeslani pred botem schoval |
||
_es Profil |
#4 · Zasláno: 8. 12. 2014, 13:33:04
dehtak:
„to ze to za ne vyplnuje neco jineho je jejich blbost“ Alebo tvoja, keď sa ti na také nepoužiteľné formuláre vykašlú a opustia stránku. |
||
juriad Profil |
#5 · Zasláno: 8. 12. 2014, 13:35:51
Té poznámky o ručním vyplňování jsem si nevšiml; uživatel si jí také nemusí všimnout.
Další problém, který máš je nefunkčnost ve více tabech, jeden formulář přepíše session tomu druhému. Věř tomu, že pokud uživatelům zabráníš používat web způsobem, na který jsou zviklí, odejdou jinam. Každá captcha kromě robotů odfiltruje také určité procento lidí. |
||
Časová prodleva: 9 let
|
0