phpRS 2.8.x : phpRS Fórum
Toto fórum je určené výhradně k diskuzi o verzích phpRS v2.8.x.
phpRS - redakční a informační systém
Jít na stránku:  12Další
Aktuální stránka:1 z 2
Kontrola při registraci čtenáře
Zaslán uživatelem/kou: Mart (IP adresa zaznamenána)
Datum: 2006-05-29, 12:51

Na webu se mi začaly objevovat registrace, které měly vždy stejnou podezřelou mailovou adresu. Zkusím to vyřešit kontrolním kódem, který musí čtenář opsat.

Nejdřív jsem to chtěl udělat podobně jako to má Atifan, ale teď je jaksi moderní opisování z obrázků.
Našel jsem si funkci pro generování obrázku, upravil ji svým potřebám a "napasoval" do phpRS.
Zatím jsem to zkoušel jen na localhostu, protože web budu celý překopávat na 280.
Byl bych rád, kdyby to někdo vyzkoušel - mám v plánu to zveřejnit na community webu (přecejenom se to někomu může hodit).

pracovní verze návodu: [http://mart.webz.cz/kontrolni_kod.html]
font (pro případ že nemáte žádný vhodný): [http://mart.webz.cz/controlcode.zip]

--------------------------
Mart, PStudio

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: audant (IP adresa zaznamenána)
Datum: 2006-05-31, 16:45

Dobrý, sqělá práce. Aplikoval jsem to nejen na registraci čtenáře, ale i do komentářů a knihy návštěv. Bohužel mi ale v IE vznikl problém (ve Firefoxu je vše OK). A to ten, že mi vygenerovaný obrázek zůstane v "keši" i když jsem si na začátek funkce create_controlcode přidal tyhle řádečky:

$imgfile="image/controlcode_temp.jpg"; //definice a umístění fyzického souboru
if (file_exists($imgfile)) unlink($imgfile); //test na existenci obrázku z minula a jeho smazání

Takže např. pokud přidám v knize návštěv příspěvek, následně se mi znovu načte stránka, vložený příspěvek je zobrazen dole a nahoře ve formuláři pro vkládání příspěvků mám stále stejný obrázek s kódem i když je ve skutečnosti již vygenerovaný jiný.
Nebo kliknu na novou registraci, ukáže se mi kód pro opsání, kliknu třeba na onu knihu návštěv a ukáže se mi opět stejný kód, i když je nefunkční a systém čeká na jiný.
Uf, snad sem to posal tak, aby to všichni pochopili.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: Mart (IP adresa zaznamenána)
Datum: 2006-05-31, 20:56

Jak to tak teď zkouším v IE, tak zjišťuji že máte pravdu.
(poučení: v ie musím testovt i funkčnost, nejen vzhled :-) )
Díval jsem se na to a nenapadá mě jak zabránit načítání toho obrázku z cache.
Napadá někoho kde je zakopaný pes?
Nejjednoduší řešení asi bude generovat náhodný název souboru s obrázkem, zobrazit ho a vymazat. Při dalším načtení už bude mít obrázek jiný název takže se znovu načte ...

--------------------------
Mart, PStudio

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-05-31, 21:53

ano nahodny nazov obrazku pomoze, pripadne v subore ktory generuje ten img pridat header() a nastavit hlavicku napriklad:
[http://www.google.sk/search?hl=sk&q=php+header+no-cache&btnG=H%C4%BEada%C5%A5+v+Google&meta=]

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-05-31, 21:58

Ten kod nevidim, takze ak je ten subor zapisany na disku, treba zabezpecit vypnutie cachovania, napada ma obsah suboru posielat php scriptom napr. ukaz_kontrolny_img.php?kod=125421 v scripte uz header nastavit pojde.

header("Cache-Control: no-cache, must-revalidate");
pozri napr. do pictures.php



Celkem upraveno 1×. Poslední úprava pa3k v 31.05.2006 22:00.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: audant (IP adresa zaznamenána)
Datum: 2006-06-01, 07:23

Kam přesně mám vložit tu hlavičku?
Když ji v souboru readers.php vložím na konci souboru za $GLOBALS["vzhledwebu"]->Generuj(); nenastane očekávaný výsledek.

Ani když přidám nastavení ze souboru pictures.php, se nedočkám kýženého výsledku.

Ještě budu nějakou chvíli experimentovat a pak asi půjdu cestou náhodného názvu obrázku. Tohle řešení mne již napadlo předtím, ale ovlivnit chování cache je asi elegantnější, nicméně IE je dost tvrdohlavý na to aby si do toho nechal kecat.



Celkem upraveno 3×. Poslední úprava audant v 01.06.2006 09:11.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: audant (IP adresa zaznamenána)
Datum: 2006-06-01, 09:11

Takže jsem to udělal takhle:
viz. původní návoda na [http://mart.webz.cz/kontrolni_kod.html]

1) v root adresáři webu je standartně podadresář image, v něm jsem vytvořil další podadresář controlcode, do kterého umisťuji vygenerované obrázky kontrolního kódu (celá cesta je pak např. image/controlcode/f4922f45.jpg).

2) původní funkci pro vytváření obrázku jsem uložil v souboru specfce.php (protože ji volám i z komentářů a knihy návštěv) a vypadá takhle:

// generator obrazku s kontrolnim kodem
function create_controlcode($code,$imgfile) {
//odstraneni minuleho obrazku
$handle=opendir("image/controlcode");
while (($file = readdir($handle))!==false) {
if ($file!="." && $file!="..") unlink("image/controlcode/".$file); }
closedir($handle);
$font = "CEMONSPB.TTF"; // pouzity font
$count = strlen($code);
$image = imagecreatetruecolor(100,30);
$background_color = imagecolorallocate($image, 250,250,250);
imagefill($image,0,0,$background_color);
// barva znaku
$color[0] = imagecolorallocate($image, 0, 0, 0);
$color[1] = imagecolorallocate($image, 204, 0, 0);
$color[2] = imagecolorallocate($image, 51, 0, 255);
$color[3] = imagecolorallocate($image, 51, 102, 51);
$color[4] = imagecolorallocate($image, 255, 153, 0);
// úhel natočení znaku
$angle[0] = 10;
$angle[1] = 21;
$angle[2] = 25;
$angle[3] = -10;
$angle[4] = -15;
$angle[5] = -23;
// create image //
for($i=0; $i<$count+1; $i++):
$pos = rand(0,5);
$col = rand(0,4);
imagefttext($image,15,$angle[$pos],10+15*$i,20,$color[$col],$font,$code[$i]);
endfor;
imagejpeg($image,$imgfile,100);
imagedestroy($image);
return "<img style=\"width: 100px; height: 30px; border: 1px solid #000000\" alt=\"code\" src=\"$imgfile\" />";
}

3) Před voláním funkce pak v sobouru raders.php vložím jeden řádek:
$imgfile="image/controlcode/".substr(md5(rand(10,20)),1,8).".jpg";

4) Při volání funkce upravím předávané parametry:
create_controlcode($code,$imgfile)

A hotovo, snad jsem na nic nezapoměl.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-06-01, 09:33

Áno, samozrejme aj tak sa dá. Ja som mal ale na mysli generovanie obrázku scriptom, bez použitia funkcií filesystému. Tento princíp sa používal v phpRS 2.6.5 a starších na generovanie grafických prúžkov grafu ankety. Funkcie sú v pictures.php. Príklad použitia: [http://www.caslavsko.net/pictures.php?rvel=29&barva=1] Jednoznačná výhoda je v tom, že script nepotrebuje právo na zápis.
Header("Pragma: no-cache");
Header("Cache-Control: no-cache");
Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT");
Header("Content-type: image/jpeg");

Pomocou týchto header presvedčím prehliadač, že výstup scriptu sa necachuje a je typu image/jpg ;)

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: audant (IP adresa zaznamenána)
Datum: 2006-06-01, 10:02

OK jdu nato. Výsledek pak napíšu.

Předešlý postup také vede do slepé uličky, neboť i když je název souboru náhodný, po určitém čase se stejně v cache objevují obrázky již neplatné a jsme opět tam kde sjme byli, totiž v.....
:-)



Celkem upraveno 2×. Poslední úprava audant v 01.06.2006 10:03.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: audant (IP adresa zaznamenána)
Datum: 2006-06-01, 11:10

Tak jsem opět tady a světe div se, s výsledkem. A zdá se že je vyhráno.

1) Do souboru pictures.php jsem na začátek (hned za odeslání hlaviček) vložil tuhle podmínku:
if (isset($_GET["controlcode"])) {
// generator obrazku s kontrolnim kodem
$code=$_GET["controlcode"];
$font = "CEMONSPB.TTF"; // pouzity font
$count = strlen($code);
$image = imagecreatetruecolor(100,30);
$background_color = imagecolorallocate($image, 250,250,250);
imagefill($image,0,0,$background_color);
// barva znaku
$color[0] = imagecolorallocate($image, 0, 0, 0);
$color[1] = imagecolorallocate($image, 204, 0, 0);
$color[2] = imagecolorallocate($image, 51, 0, 255);
$color[3] = imagecolorallocate($image, 51, 102, 51);
$color[4] = imagecolorallocate($image, 255, 153, 0);
// úhel natočení znaku
$angle[0] = 10;
$angle[1] = 21;
$angle[2] = 25;
$angle[3] = -10;
$angle[4] = -15;
$angle[5] = -23;
// create image //
for($i=0; $i<$count+1; $i++):
$pos = rand(0,5);
$col = rand(0,4);
imagefttext($image,15,$angle[$pos],10+15*$i,20,$color[$col],$font,$code[$i]);
endfor;
imagejpeg($image,null,100);
exit;
}

2) Místo volání funkce create_controlcode stačí napsat:
echo "<img style=\"width: 100px; height: 30px; border: 1px solid #000000\" alt=\"code\" src=\"pictures.php?controlcode=$code\" />\n";

A hotovo, obrázek se nikam neukládá a hlavičky na začátku pictures.php donutí prohlížeč obrázek načíst i bez cache.
Díky pa3kovi, někdy stačí nakopnout.

viz. [http://keyoke.beacon.cz/skaut]
Tohle je můj localhost web server pro testování, mám pevnou IP adresu tak je vidět i ze sítě.



Celkem upraveno 9×. Poslední úprava audant v 01.06.2006 11:40.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: Mart (IP adresa zaznamenána)
Datum: 2006-06-01, 13:08

Pak mě taky napadlo podívat se jak je to řešeno u ankety a generovat to přímo bez ukládání, ale než se k tomu člověk dostane, tak to vyřešíte za něj :-).


--------------------------
Mart, PStudio

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-06-01, 13:16

NZ, doplním ešte jednu skúsenosť: pri použítí funkcie imageFTtext mi php4 hlási chybu:
Wrong parameter count for imagefttext()

použil som funkciu imageTTFtext a je to OK, bližšie info tu:
[http://bugs.php.net/bug.php?id=30120]

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-06-03, 22:30

Ešte jedna vec:
// create image //
for($i=0; $i<$count+1; $i++):

Prečo je tam count+1? Podľa mňa tam +1 nemá čo hľadať.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: Mates77 (IP adresa zaznamenána)
Datum: 2006-07-02, 11:23

Moc se omlouvám, jsem totální lama, nepodařilo se mi to vůbec rozchodit. Kontrolní kod jsem do stránek dostal ale nejde se mi vůbec zaregistrovat. Poraďte mi prosím někdo?

Zde je odkaz na to jak to vypadá Zde je odkaz na to jak to vypadá

Pokud se zajímáte o hasičský sport, tak zde: [http://www.sdhdvorce.cz]



Celkem upraveno 1×. Poslední úprava Mates77 v 02.07.2006 11:24.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: lukas (IP adresa zaznamenána)
Datum: 2006-07-03, 23:32

Mam jednu vlastne dve poznamky.
Ae predem bych chtel podekovat ze se timto probleme zacal nekdo zabyvat.
A ted k tem postrehum:
1. Asi by bylo dobre schovat jeste ten vygenerovany kod do nejakeho obrazku aby si ho nejaky robot nemohl odhadnout.
2. Jeste by se hodilo zmenit odesilani generovaneho kodu primo v url adrese obrazku.

Dobry zdroj je na [http://programujte.com/view.php?cisloclanku=2005100301-Jak-vytvorit-obrazek-s-kontrolnim-kodem]

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-07-04, 01:16

--------------------8<----------------
Tiež som sa nedávno hral s captcha systémom ale bez použitia databázy. Generujem kód a posielam ako hidden input aj hash správnej odpovede. Script nepoužíva databázu, len overí či sedí odpoveď a odoslaný hash. Ak by bol ten hash osolený tak robot nemá šancu aj keby podstrčil svoju odpoveď aj svoj predgenerovaný hash. String ktorým budem soliť, bude nejaký časovo závislý údaj, napríklad casť timestampu. Tým zabezpečím platnosť kódu na určité obdobie, napríklad 24 hodín. Jediné slabé miesto je generovanie obrázku pomocou pictures.php :-]
[http://www.kvalitne.sk/koncepty/nicnove/pictures.php?controlcode=HESLO] správny kód je totiž viditeľný ako parameter :) aj keď nie je zhodný, dá sa pochopiť systém :) Takže uvažujem ešte o nejakom zakódovaní parametru pictures napríklad pomocou base64_encode/decode. Táto captcha sa objaví len ak sa v texte objaví kľúčové slovo, v tomto prípade je to citlivé na text href a http:// Ak je formulár odoslaný za nemej ako 5 sekúnd od vygenerovania, rovno ho zahodím a nebavím sa. Koncept testujem tu: [http://www.kvalitne.sk/koncepty/nicnove/board.php] kľudne to vyskúšajte, skúste vložiť HTML odkaz ;)
--------------------8<----------------
Toto som písal pred nedávnom ako príspevok do iného fóra. Problém je v tom, že na hromadné uplatnenie to nie je moc vhodné. Z parametru predávanému do pictures.php sa dá zistiť kód. Preto má táto funkcia šancu na úspech jedine ak bude parameter predávaný do pictures.php kódovaný pokiaľ možno pre každý web jedinečným spôsobom, napríklad funkciou XOR s použitím názvu databázy...

Každopádne Jirka sa broblematike SPAMU postavil zoči-voči :) a v ďalšej verzii phpRS pravdepodobne môžme očakávať komplexné riešenie problematiky spamu. Toto riešenie (možno viedieť v komentároch na [http://www.supersvet.cz] ) je prakticky neprelomiteľné a je použiteľné aj pre zrakovo postihnutých, čo obrázková captcha neumožňuje.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-07-04, 01:22

Áno, pozeral som aj ten spôsob popísaný na [http://programujte.com] , používa to session. Šikovný a jednoduchý nápad.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: lukas (IP adresa zaznamenána)
Datum: 2006-07-04, 01:42

¨jop koukal sem na to jen bohuze se session nemam zadne zkusenosti a havne jestli se nepletu tak phprs taky poziva session pro udrzeni informaci o prihlaseni a vazne netusim jak to skloubit. Tak jestli se nepletu a nahodou nekdo vite jak na to tak kdyztak pisnete, protoze spamu chodi jak .....

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2006-07-04, 01:51

phpRS používa vlastný session handler založený na porovnávaní kľúča v cookie, takže ten príklad môžeš kľudne použiť, biť sa to nebude. Jediná nevýhoda sessions je IMHO v tom, že pri vysokej návštevnosti zaťažia oveľa viac server (pamäťovo) ako to vyššie popisované riešenie ktoré nepoužíva ani databázu ani session.

Re: Kontrola při registraci čtenáře
Zaslán uživatelem/kou: lukas (IP adresa zaznamenána)
Datum: 2006-07-04, 02:10

ok budu nad tim muset vice popremyslet diky za nasmerovani kdyztak se jeste prihlasim o slovo

Jít na stránku:  12Další
Aktuální stránka:1 z 2


Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.