Autor | Zpráva | ||
---|---|---|---|
jany Profil |
#1 · Zasláno: 15. 11. 2006, 10:24:45
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 |
#2 · Zasláno: 15. 11. 2006, 10:41:31 · Upravil/a: Program
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 |
#3 · Zasláno: 15. 11. 2006, 10:44:52
Vyskusam to ked budem mat cas, ale pises, ze to neni najidealnejsie riesenie, je aj nieco idealnejsie ??
|
||
Program Profil |
#4 · Zasláno: 15. 11. 2006, 10:47:18
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 * |
#5 · Zasláno: 15. 11. 2006, 12:14:54
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 |
#6 · Zasláno: 17. 11. 2006, 08:45:19 · Upravil/a: jany
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 * |
#7 · Zasláno: 17. 11. 2006, 10:41:37
Podívej se na zdrojový kód s vypnutými styly.
|
||
Časová prodleva: 18 dní
|
|||
rtre Profil * |
#8 · Zasláno: 5. 12. 2006, 01:12:10
gdsfgsdfg
|
||
rtre Profil * |
#9 · Zasláno: 5. 12. 2006, 01:12:10
gdsfgsdfg
|
||
rtre Profil * |
#10 · Zasláno: 5. 12. 2006, 01:15:21
gdsfgsdfgzxz
|
||
rtre Profil * |
#11 · Zasláno: 5. 12. 2006, 01:16:23
sorry za ty hatlapatlaniny sekl se mi prohlizec
|
||
kritik jako poleno Profil * |
#12 · Zasláno: 6. 12. 2006, 21:06:10
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 * |
#13 · Zasláno: 6. 12. 2006, 21:49:45
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... ;)
|
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0