Autor Zpráva
jany
Profil
mam na svojej stranke knihu navstev, http://jany.wz.cz/index.php?page=gbook ale
strasne mi to spamuje, aj niekolko krat denne. Ale neviem ako sa robi v php ten
kontrolny kod na overenie (ze ked niekto chce do knihy napisat, tak sa mu
vygeneruje nejake cislo na obrazku, ktore musi zapisat do kolonky a az potom
moze udaje odoslat) Please help
Program
Profil
Neni to asi nejidealnejsi reseni, ale :

<?php
/********************************************************************* ****************************************/
/* Captcha */
/* Copyright c 2006 ProgramCZ - http://program.error414.com/ */
/* */
/* */
/* Last Updated: 28 července 2006 */
/* Disclaimer: The author accepts no responsibility for */
/* problems arising from the use of this class. The CAPTCHA */
/* generated is not guaranteed to be unbreakable. */
/********************************************************************* ****************************************/
/* Pouziti : 1) vlozit php soubor s definovanym volanim tridy */
/* jako obrazek */
/* 2) Pridat form pole pro zadani cisla */
/* 3) Includovat tridu do overovani */
/* 4) Overit pres statickou metodu Captcha::Over($zadanecislozformu) */
/* (Napr: if (!Captcha::Over($_POST['cap'])) { */
/* echo("<div style=\"text-align: center;\">Prosím vloľte čísla z obrázku.<br /></div>"); */
/* }else{ */
/* ) */
/********************************************************************* ****************************************/


@session_start(); //Startuje session pro kontrolu captcha
//Zakladni promene
define('CAPTCHA_X', 270); //sirka platna
define('CAPTCHA_Y', 75); //vyska platna
define('CAPTCHA_POC_CIS', 4); //pocet cisel v platne
define('CAPTCHA_POC_CAR', 1000); //pocet matoucich car
////////////////////////////////////////////////////////////

class Captcha {
private $obrazek;
public $x_platna;
public $y_platna;
public $barva;

function __construct($x_platna=CAPTCHA_X, $y_platna=CAPTCHA_Y,$poc_cis=CAPTCHA_POC_CIS, $poc_car=CAPTCHA_POC_CAR){
$this->Nastav_x($x_platna);
$this->Nastav_y($y_platna);
$this->Nastav_poc_cis($poc_cis);
$this->Nastav_poc_car($poc_car);
}

public function Nastav_x($x_platna){
$this->x_platna = $x_platna;
}
public function Nastav_y($y_platna){
$this->y_platna = $y_platna;
}
public function Nastav_poc_cis($poc_cis){
$this->poc_cis = $poc_cis;
}
public function Nastav_poc_car($poc_car){
$this->poc_car= $poc_car;
}
public function Zobraz(){
//vytvoreni nahodne kombinace cisel
for ($i=0; $i< $this->poc_cis; $i++){
$cisilko=rand(0,9);
$string=$string.$cisilko;
$_SESSION['captcha']=sha1($string); //ulozeni otisku do sessionu
}
$text=$string;
//kresleni platna
$obrazek=imagecreatetruecolor($this->x_platna,$this->y_platna);
$this->obrazek = $obrazek;
$okraj=imagecolorallocate($this->obrazek,0,0,0);
$pozadi=imagecolorallocate($this->obrazek,217,231,200);
$barvy[]=imagecolorallocate($this->obrazek,128,64,192);
$barvy[]=imagecolorallocate($this->obrazek,192,64,128);
$barvy[]=imagecolorallocate($this->obrazek,108,192,64);
imagefilledrectangle($this->obrazek,1,1,$this->x_platna-2,$this->y_pla tna-2,$pozadi);
imagerectangle($this->obrazek,0,0,$this->x_platna-1,$this->y_platna-1, $okraj);
imageantialias($this->obrazek,true);
//carecky
for ($i=0; $i< $this->poc_car; $i++){
$x1=rand(5,$this->x_platna - 5);
$y1=rand(5,$this->y_platna - 5);
$x2=$x1+rand(0,8);
$y2=$y1+rand(0,8);
imageline($this->obrazek,$x1,$y1,$x2,$y2,$barvy[rand(0,count($barvy)-1 )]);
}
//psani testovaciho textu
for ($i=0;$i< strlen ($text); $i++){
$this->barva=$barvy[$i % count ($barvy)];
imagettftext($this->obrazek, 28 + rand(0,8), -20 + rand (0,40),($i + 0.3) * rand (21+$i*$i+1,42),50+ rand(0,10),$this->barva,'VeraMoBd.ttf',$text{$i});
}
//odeslani hlavicky a obrazku
header('Content-Type:image/png');
imagepng($this->obrazek);
}
//Staticka metoda (Captcha::Over($zadanecislozformu))
static function Over($Kod) {
if (sha1($Kod) == $_SESSION['captcha']) {
// vycisteni sessionu
$_SESSION['captcha'] = '';

return true;
}

return false;
}

}
?>

Obrazek se vlozi z php skriptu s timto obsahem (napr.) :
<?php
//pokus s tridou :)
include("captcha.php");
$phpObraz= new Captcha ();
$phpObraz->Nastav_poc_cis(5);
$phpObraz->Nastav_poc_car(1900);
$phpObraz->Zobraz();
?>

Jeste neco potrebujes pismo VeraMoBd.ttf do stejneho adresare jako je ta trida
A komu se to nelibi necht ho google polibi : http://www.google.com/search?hl=cs&q=Captcha+PHP&btnG=Vyhledat+Googlem &lr=
jany
Profil
Vyskusam to ked budem mat cas, ale pises, ze to neni najidealnejsie riesenie, je aj nieco idealnejsie ??
Program
Profil
Vyskusam to ked budem mat cas, ale pises, ze to neni najidealnejsie riesenie, je aj nieco idealnejsie ??
Ne nic idealnejsiho - vzdycky to ma nevyhody - o tom se vedli dlouhe debaty. Jde treba o to ze captchu muzou mit problem precist lide se zrakovym postizenim atp. Dle meho nazoru neexistuje idealni reseni - vzdycky to nejak omezi pristupnost.
k
Profil *
jany
Koukni se jak je to delany tady na tom foru a zkopiruj to. Je to udelano efektivne a jednoduse.

Program
Captcha ma velky problem v tom ze spam boti si ruzne vygenerovane obrazky porovnavaji s databazi jiz vygenerovanych obrazku a dokazou ji pak snadno obejit. Jedine prozatimni reseni je v JS ktery spam boti zatim(?) neumi.

Pozn. k tomu otazniku: Nam uz na web prisel bot ktery se dokazal vyhnout prihlasovacimu formulari, ktery byl nad formularem pro pridani nazoru, nasledne ho nezmatlo ani tlacitko pro nahled(ktere napr. na intervalu drzi spam na uzde), pote zvladl i nasi JS kontrolu a zacal nam cpat spam. Pokazde z jine IP adresy. Nacpal do jednoho clanku behem dne asi 12 spamu(v ruznych casovych intervalech).
Napred bylo podezreni ze musi jit o cloveka, ale pak nacpal 6spamu behem asi 2 vterin a zas pokazde z jine IP.
Pak uz se na webu neobjevil.

Takze se bojte a treste az spameri upgraduji sve boty:)
jany
Profil
Koukni se jak je to delany tady na tom foru a zkopiruj to. Je to udelano efektivne a jednoduse.

a kde sa mam na to pozret ako je to udelano tu na tom foru ?
zdenek
Profil *
Podívej se na zdrojový kód s vypnutými styly.
rtre
Profil *
gdsfgsdfg
rtre
Profil *
gdsfgsdfg
rtre
Profil *
gdsfgsdfgzxz
rtre
Profil *
sorry za ty hatlapatlaniny sekl se mi prohlizec
kritik jako poleno
Profil *
Jany - víš co dělám já? Hodím si tam nějakou knihu z weblightu nebo blueboardu a mám po starostech. Tady mě za to jistě budou kamenovat ale proč to nenechat na hošanech co to uměj líp neš já?

Jo mimochodem když je něco ideální tak je to prostě nejvyšší stupeŇ jako třeba optimální, pak nemůže bejt něco ideálnějšího nebo optimálnějšího... no nic....
X-mass
Profil *
Ja sem si to vyresil tak ze si vygeneruju nejaky kod "$znak=strtoupper(substr(md5(rand()),1,4));" ten pak poslu zasifrovany pomoci funkce "$code = Base64_Encode($znak)" scriptu ketry me generuje obrazek s tim kodem ve tvaru "<img src='obrazek.php?security=$code'..." ve scriptu "obrazek.php" to zase rozkoduju a vypisu... pak si ten kod na strance jeste zahashuju pomoci md5() a po odeslani inputu se vepsany kod taky zahashuje pomoci md5() a porovna jestli je stejny... pokud jo prispevek se vlozi... Je to slozite vysvetlit ale jednoduche a zatim 100% ucine reseni... ;)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0