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();
})
})
no abych se vratil k php scriptu ktery vygeneruje adresu pro odeslani formulare
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);
Takze vlastne adresa pro odeslani formulare bude po kazde jina

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
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
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
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í.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: