[ Okram_marko @ 12.06.2008. 03:12 ] @
Pozdravljam,


Imam stranicu sa kontakt formom. U pozadini je php za slanje informacija pokupljenih sa forme.
E sada, nedavno su mi poceli dolaziti spam e-mailovi putem te forme. Onda sam ubacio ono "koliko je 2+2?", ali to nije promjenilo situaciju. Sta da radim?

Evo cod ispod..

Code:

<?php 

@extract($_POST);

function jeli_email($string)
{
    $string = trim($string);
    $string = strtolower($string);
    
    if(preg_match("/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+\.)+([0-9A-Z]){2,4}$/i", $string)) { // Stolen from vb :)
        return $string;
    } else {
        return false;
    }
    
}
    
    $mail_poruka = '
    <p>Kontaktirani ste putem kontakt forme na vase web stranice!<br />
    Slijede kontakt podaci:<br />
    </p>
    
    <p><strong>Ime:</strong><br />'.$ime.'</p>
    <p><strong>Kontakt telefon:</strong><br />'.$telefon.'</p>
    <p><strong>Email:</strong><br />'.$email.'</p>
    <p><strong>Poruka:</strong><br />'.$poruka.'</p>
    <p><strong>IP Sa koje je mail poslan:</strong><br />'.$_SERVER['REMOTE_ADDR'].'</p>
    
    
    
    ';
    $kome_email = "[email protected]";
    $mail_subject = $ime.', vas je kontaktirao sa vase web stranice!';
    $headers = "From: $ime <$email>\nContent-Type: text/html; charset=iso-8859-2 \r\n";
    $headers .= "X-Mailer: Jobitou.com PHP kontakt podrska \r\n";
    
    {
        if(empty($ime)){
            echo '<font color="#FF0000">Morate unijeti ime!</font><br />';
        }
        
         if(empty($telefon)){
            echo '<font color="#FF0000">Morate unijeti telefon</font><br />';
        } 
    
        if(empty($email)){
            echo '<font color="#FF0000">Morate unijeti email!</font><br />';
        }
        if(empty($poruka)){
            echo '<font color="#FF0000">Morate unijeti poruku!</font><br />';
        
        }
        if(!jeli_email($email)){
        echo '<font color="#FF0000">Morate unijeti ispravan email!</font><br />';
        
        }
        if($pitanje != "4"){
        echo '<font color="#FF0000">Nista ispravno odgovorili na pitanje. Pokusajte ponovo!</font><br />';
        }
        
    
     else {


    mail($kome_email, $mail_subject, $mail_poruka, $headers);
    
        
    
    echo '<font color="#cccccc">Uspjesno ste poslali mail D-Efect design sluzbi!</font><br />';
    echo '<font color="#cccccc">Za povratak na prethodnu stranicu kliknite <a href="kontakt.html" class="main">[ovdje].</a></font><br />';
    }
    }
?>


******* cod za provjeru da li je odgovor na 2+2=4 ??
Code:

if($pitanje != "4"){
        echo '<font color="#FF0000">Nista ispravno odgovorili na pitanje. Pokusajte ponovo!</font><br />';
        }


Daj neka netko rekne sta da radim.
[ peromalosutra @ 12.06.2008. 06:46 ] @
Stavi neko teže pitanje!

Zašto ne bi pokušao da uradiš klasično prepoznavanje koda, znači generišeš neki random string i onda ga iscrtaš sa GD bibliotekom i lupiš još nekih par linija preko toga, ili još malo zakomplikuješ situaciju (npr. da se čitaju samo znakovi odredjene boje).. I onda se naravno provjerava vrijednost koju je unjeo korisnik sa generisanom vrijednošću.
[ stsung @ 12.06.2008. 06:57 ] @
Pozd.

Ovo shto je peromalosutra rekao je u sushtini i najbolje reshenje, a imash i freeCap kao besplatno gotovo reshenje lako za implementaciju. Nego hteo sam samo neshto primetiti ... sad mozhda sam corav jer je kod chudno nazubljen, ali po ovom tvom kodu ja vidim da ce on poslati email uvek ako je odgovor jednak 4, bez obzira ako neki od prethodnih obaveznih parametara nedostaje - sa sve ispisom da korisnik mora uneti ime ili email.

Svako dobro.
[ Okram_marko @ 12.06.2008. 07:07 ] @
U pravu si, kada sam ovo dodao nisam pazio pa se samo odgovorom na pitanje moze poslati poruka.
Mene sad zanima kako je spam prosao kroz ovo... ??
Hajde, dajte nesto sto bi mogao staviti. taj neki random.. Samo da ne izgleda bjedno
Ovo sa bojama mi se cini naj bolje. Da korisnik upise samo slova npr zute boje. Dajte nesto od toga pa da vidim.
[ stsung @ 12.06.2008. 07:20 ] @
Pozd.

Trust your feeling and use tha google ;) Da si ukucao freeCap u google dobio bi sajt www.puremango.co.uk

A kako prodju ... pa ne znam shta da ti kazhem ... ovakav vid provere je provaljen odavno, verovatno skontaju da na stranici imash 2 + 2 i polje kao deo formulara i onda ti ga poshalju - pod uslovom da posle tog if (pitanje!=4) zaista ide taj else naravno :) Danashnji spameri su se unapredili, i bogami ni slike kao zashtita nisu dovoljno dobre jer imaju i mogucnosti za prepoznavanje teksta u slikama i ako nije dovoljno "iskrivljen" eto tebi opet radosti. FreeCap je dovoljno dobar za ovu primenu, i lak za korishcenje.

Svako dobro.
[ Okram_marko @ 12.06.2008. 14:12 ] @
A ima li nesto manje bolno sto se tice cod-a i implementacije?
Evo sad nesto razmisljam da napravim dropdown meni na koji mail da se salje. E sada, da recimo u drop down ubacim ime a da kada php vidi sta je odabrano, onda na taj mail salje. Po default-u ne bude odabran mail. Koji sistem moze "otvoriti" drop down...
Sta kazete na ovo?

Dajte neko svoje rijesenje na ovaj fazon.
[ dakipro @ 12.06.2008. 14:33 ] @
Iskreno, mislim da ima vec gomila prostih resenja kako na internetu tako i po forumu, cini mi se da je i Nemanja Avramovic negde postovao animiranu captchu, tako da ne znam sta ti prostije treba od toga.
A kak omislis koj sistem moze otvoriti dropdown?
Drop down nije nista komplikovaniji od text polja sa stanovista botova, samo selektuje poslednji u nizu i pici dalje...
Iskreno, mozes da probas da dodas foru sa prazim hidden poljem, opet potrazi forum, bilo je reci o tome kako se koristi.
[ Nemanja Avramović @ 12.06.2008. 17:15 ] @
Animirana kepča: http://www.elitesecurity.org/p1425017
Akismet: http://www.elitesecurity.org/p1954959

Jedno od ova dva bi trebalo da pomogne. A možeš ih koristiti i zajedno.
[ stsung @ 12.06.2008. 18:49 ] @
Pozd.

Lichno sam josh davno na jednom sajtu implementirao ovaj freeCap ... i zaista nema mudrosti ... skinesh arhivu, u njoj ima nekoliko fajlova. Sve to kopirash na server. U fajlu freecap.php namestish par parametara (sve je objashnjeno u fajlu) koji se tichu duzhine teksta koji ce se generisati u slici, koliko je iskrivljeno i tako to i onda taj fajl koristish kao sliku sa <img src="freecap.php">. Pri generisanju u trenutnu sesiju ce biti navedena generisana vrednost slike, koju pri submitu treba da uporedish sa onim shto je submitovano i to je sve. Ima i neki dodatan fajl kao wrapper koji mislim daje mogucnost da posebno implementirash tu proveru, ali nisam to koristio, uzmi malo pa prochitaj, probaj.

Svako dobro.
[ peromalosutra @ 12.06.2008. 21:54 ] @
Budući da je ovo php forum, evo malo koda. Ovo je najosnovnije, ali lako ti je razraditi i prilagoditi svojim potrebama, samo se malo poigras sa GD bibliotekom. :)

check.php
Code:
<?php
    srand();
    $code = substr(md5(rand()),-6);
    echo '<img src="code.php?code='.$code.'"></img> <br />';
?>


code.php
Code:

<?php
    if (!isset($_GET['code']) || empty($_GET['code']))
        $code = "Error";
    else
        $code = $_GET['code'];
    header("Content-type: image/png");
    $img = imagecreatetruecolor(80,30);
    $text_color = imagecolorallocate ($img, 0xFF, 0xFF, 0xFF);
    imagestring($img, 5, 12, 7,  $code, $text_color);
    imagepng($img);
    imagedestroy($img);
?>
[ Okram_marko @ 12.06.2008. 23:52 ] @
E ljudi ovo sa: http://www.elitesecurity.org/t237586-0#1425017 mi se cini najbolje. E gdje sta i kako sa ovim? Kako da ja to ukombinujem sa ovim svojim?
[ dakipro @ 13.06.2008. 08:23 ] @
A da li si barem probao zivotati da je ubacis?!
Gde si tacno stao pa imas problem?
[ agvozden @ 13.06.2008. 09:59 ] @
Code:
$headers = "From: $ime <$email>\nContent-Type: text/html; charset=iso-8859-2 \r\n";


ovde neko moze, preko $ime, da ti ubaci escape sekvencu i da napise novi header i tako posalje mejlove na n adresa...
[ agvozden @ 16.06.2008. 08:54 ] @
Sada sam primetio:

Code:
<img src="code.php?code='.$code.'"></img>


Ovim $code bude vidljiv kroz html, sto znaci da $code treba zamaskirati, tj provuci kroz neku obradu (md5 ili slicno...)