PHP AntiSPAM
Sziasztok!
írtam egy Captcha szkriptet és az lenne a kérdésem, hogyan lehetne azt megvalósítani, hogy betűnként más legyen a fok és a betűszín?
tehát ha van 4 betű, akkor mind a négynek más legyen a színe...
eddig jutottam:próbáltam az imagettftext() függvényt egy forciklusba tenni és azt substr()-el vagdosni, de nem akar úgy összejönni. Hogyan kéne ezt átírni, hogy betünként más színű legyen?
segítségeteket előre is köszönöm!
■ írtam egy Captcha szkriptet és az lenne a kérdésem, hogyan lehetne azt megvalósítani, hogy betűnként más legyen a fok és a betűszín?
tehát ha van 4 betű, akkor mind a négynek más legyen a színe...
eddig jutottam:
<?php
session_start();
header("Content-type: image/png");
$number = "";
$KEY = "0123456789abcdefghijklmnopqrstuvwxyz";
for($i = 0; $i < 4; $i++) {
$number .= substr($KEY, rand(0, 36), 1);
}
$hash = md5($number);
$_SESSION['ellenorzo'] = $hash;
$imagewidth = 100;
$imageheight = 50;
$fontsize = "25";
$fontangle = "0";
$font = "jupitern.ttf";
$text = $number;
$backgroundcolor = "003366";
$textcolor = "FF8A16";
if( eregi( "([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})", $textcolor, $textrgb ) ) {
$textred = hexdec( $textrgb[1] );
$textgreen = hexdec( $textrgb[2] );
$textblue = hexdec( $textrgb[3] );
}
$im = ImageCreateFromJPEG("bg.jpg");
$fontcolor = imagecolorallocate($im, $textred,$textgreen,$textblue);
$box = @imageTTFBbox($fontsize,$fontangle,$font,$text);
$textwidth = abs($box[4] - $box[0]);
$textheight = abs($box[5] - $box[1]);
$xcord = ($imagewidth/2)-($textwidth/2)-2;
$ycord = ($imageheight/2)+($textheight/2);
imagettftext ( $im, $fontsize, $fontangle, $xcord, $ycord, $fontcolor, $font, $text );
imagepng($im);
imagedestroy($im);
?>
segítségeteket előre is köszönöm!
Nem látom értelmét
Sokkal hasznosabb szerintem egy mező betétele, amit mondjuk JavaScript-tel elrejtesz és melléírod, hogy "ezt ne töltsd ki". Namost minden valamire való spambot megpróbálja kitölteni. Mondjuk HTML-ben adj neki valami jó kis nevet, pl ilyet hogy "firstname".
Minek?
Már többször leírtam itt a Weblaboron is, hogy én annyit csinálok, hogy a bot számára nem egyértelmű (értsd nem name, email, stb.) nevet adok az input-oknak, valamint regex-es ellenőrzés van a bevitt adatokra. Ez mellé társul még egy e-mail cím checkelés. Ha nem tölti ki az e-mail mezőt a bot, mert nem tudja, hogy oda kellene írni az e-mail címet, akkor nem küldi be a szemetét.
Ez a megoldás most már lassan 2 éve olyan szépen üzemel, mint állat. Félévente egy-két üzenet bejön egy vendégkönyvbe bot által, de ezen kívül semmi.
Ne becsüld le az ellenséged!
1. captcha-t használni nem feltétlenül csak regisztrációs oldalaknál szokás használni. Például célszerű bejelentkezéseknél is. Mondjuk ha 3 szor már elrontották a név/jelszó párost akkor célszerű kidobni egy catcha-t a "felhasználónak". Ha nem teszed annyiszor próbálkozhatnak ahányszor csak akarnak. (feltéve ha más módon nem szűrőd, mondjuk időkorláttal ami megjegyzem elég idegesítő).
2. Nem lehet akkora ördöngösség testre szabni a feltörő programokat, hogy nem az "email" input elemhez kell írni a emailcímet hanem a "sdfsd" hez. És olyan oldalnál ahol ezt megéri megcsinálni meg is fogják csinálni! Jó lehet jönni azzal hogy ilyet senki nem fog ilyet megcsinálni kis látogatottságú oldalaknál.
3. oké hogy az inputnak adsz egy "sdfsdf" nevet de véletlenül az input előtt nem írod ki a felhasználóidnak hogy "Email-címed: ", sőt esetleg nincs véletlenül egy label címkében? Hidd el okosabbak mint te azt hiszed.
Soha ne becsüld le az ellenséged! Sok pénz van a reklám bizniszben. És rohad sok idejük van fejlesztgetni a programjaikat.
Egyébként meg örülök hogy neked (eddig) bevált a ez a fajta védelem, de légyszíves ne buzdíts senkit arra hogy hogy egy védekezési módot elhagyjon. (főleg ha az egy széles körben használt, és elfogadott védekezési módszer)
darkraptor: Netten vannak nagyon jó catcha-k. Van már 3D is.
Nem bescsülöm ...
Egyébként valóban kisforgalmú oldalról beszélünk, ahol ez már majd' két éve gond nélkül megy (azóta már egy másik oldalon is így működik a vendégkönyv). Viszont az indulás után eltelt 1 hónap, mire a bot-ok megtalálták az oldalt. Jött napi 30-60 spam üzenet a vendégkönyve. Betettem egy egyszerű spam filetert, ami adott szavakra szűrt. Meguntam, hogy mindig frissítgetni kell, ezért alkalmaztam az elmített megoldást. Egy ideig még logoltam, hogy hány próbálkozása volt a botoknak naponta, kb. ugyanannyi, mint amikor be is küldték a cuccost. Azóta talán fél évente ha 1-2 üzenet bejön, pedig ki van írva, hogy e-mail label-ben. Ezek szerint hülye botok járnak az oldalra vagy csak egyszerűen szerencsém van. Nemtom, de amíg ez működik nem pazarlom az energiámat captcha-ra (legfőképpen nem traktálom ezzel a user-t).
Ihaj
Nem szép
Nem szép megoldás, én legalábbis ha tehetem, sosem írok valódi funkció nélküli HTML-t.
A legszebb megoldás valószínűleg a matematikai feladat, vagy egyéb kérdés. (Illetve a hagyományos CAPTCHA-k közül kész megoldásként tudom ajánlani a reCAPTCHA-t, a könyvdigitalizálás jegyében :))
Hogyne volna funkciója!
Már hogyne volna funkciója az ilyen "honeypot" mezőknek! Az a funkciója, hogy védjen a botoktól.
Én egyébként CSS-sel dugom el az ilyen mezőket, és tökéletesen működnek.
thx
Megnézem a 3D-s CAPTCHA-t és a reCAPTCHA-t is, ahogy tanácsoltátok, bizonyára fejlettebb techikát alkalmaznak, de légyszíves válaszoljatok arra a kérdésemre, hogyan lehetne betünként változtatni a színt a kódomban! tudom, szerintetek fölösleges a kódom, de én szeretném tudni, hogy mit kéne átírni. Tuti FOR ciklus lesz, de nekem nem jön össze.
előre is köszönöm, addíg tanulmányozom a 3D-s + a reCAPTCHA-t...
for ciklus
Egyébként így első ránézésre ezt a kódot:
tévedés!
egyrészt megfogadtam a 3D CAPTCHA megoldást, jónak tűnik és sokszor már nekem is nehezemre esik kiolvasni a 3D-s szöveget belőle, úgyhogy a SPAM-et is bizonyára megízzasztja majd.
Másrészt pedig kitaláltam egy olyan megoldást is, hogy a CAPTCHA-ban azt jelenítem meg, hogy "kilencszázötvennyolc" és az ürgének a számot kell beütnie a mezőbe, tehát "958"-at. Ezzel kapcsolatosan lenne egy olyan kérdésem, hogy a SPAM hozzá tud férni a SESSION-hoz?
mert ugye így 2 adatot kell SESSION-ba átküldenem: a random szöveget + a hozzá tartozó számot. Nyílván md5() kódolást fogok alkalmazni, ez alap. Csak kérdés, hogy ezt nem tudja-e a SPAM kiolvasni?
mi a véleményetek erről a megoldásról? előre is köszi a hozzászólásokat!
session