• Bannato User Attivo

    form con codice di sicurezza

    Mi serviva un form antispam costruito in php

    Io non ho trovato nulla in rete che non ci siano le librerie grafiche di mezzo per rappresentare il codice.

    Io avevo pensato a javascript, dove il bot non dovrebbe trovarlo.

    in ogni caso come posso fare?

    ciao 🙂


  • Bannato User Attivo

    Forze ci sono riuscito, ma ho ancora bisogno di qualche aiuto per continuare

    ho usato delle costanti fisse che contenevano gli indirizzi di alcune .gif che contenevano lettere e numeri

    poi ho fatto 6 rand del tipo:
    $a = rand(27,36);

    dove 27,36 andavano a trovare questo numero causale che serviva per riprendere la costante precedente in questo modo:

    $ff1 = ${'cod'.$a};
    $filename1 = "$folder/$ff1";

    ripetuto questo per 6 volte, il numero degli elementi di codice

    poi arriva il punto della lettura e quindi faccio:

    $fp1 = @fopen($filename1,'rb');
    $str1 = @fread($fp1,filesize($filename1));

    dove $filename1 contiene l'indirizzo dell'immagine dell numero causale

    ed infine

    header('Content-type: image/gif');
    echo "$str1";

    sempre per 6 volte

    e correttamente mi compaiono sulla pagina i sei numeri causali, di cui non so l'indirizzazione , quindi non potrei riconoscerli.

    ma ora il fatto è che ho un problema con gli header content

    nel senso che si aprono correttamente le immagini...ma ora il testo html che scrivo subito dopo gli echo non mi vengono visualizzati perchè vengono riconosciuti come formati gif.

    ho provato anche a fare

    header('Content-type: text/html');

    ma è stato unutile?

    come devo fare ora? non esiste poi un modo per chiudere questi header? :mmm:


  • Bannato User Attivo

    uh?


  • Bannato User Attivo

    ?


  • User Attivo

    Io ho fatto questo.
    Crea un file captcha.php e mettici questo codice.
    [PHP]
    <?
    session_start();
    $risultato = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
    $immagine = imagecreatefromjpeg("captcha.jpg");
    $testo = imagecolorallocate($immagine, 0, 0, 0);
    $font = imageloadfont("captcha.gdf");
    imagestring($immagine, $font, 1, 3, $risultato, $testo);
    $_SESSION['controllo_captcha'] = $risultato;
    header("Content-type: image/jpeg");
    imagejpeg($immagine);
    ?>
    [/PHP]

    Il file captcha.jpg deve essere un immagine 85x30, ti allego quella che uso io. Poi nella stessa cartella devi mettere il font in formato gdf, ti allego zippato quello che uso io.

    poi in fondo al form metti una cosa del genere:
    [HTML]
    <tr>
    <td>Codice di controllo</td>
    <td>
    <img src="captcha.php"><br>
    Il codice qui sopra è <input type="text" name="chiave">
    </td>
    </tr>
    [/HTML]

    e prima di mandare un'email fai questo semplcie controllo
    [PHP]
    if($chiave!="" AND $_SESSION['controllo_captcha']==$chiave) {
    // manda email
    }else{
    // segnala che il codice è sbagliato
    }
    [/PHP]

    Molto più semplice di quelli complessi che salvano file e cose del genere. Poi questo è molto personalizzabile, puoi mettere la foto che vuoi al posto dei numeri o puoi modificare il file usando imagettftext invece di imagestring, così puoi usare qualsiasi font ttf.


  • Bannato User Attivo

    @scar81 said:

    Io ho fatto questo.
    Crea un file captcha.php e mettici questo codice.
    [PHP]
    <?
    session_start();
    $risultato = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
    $immagine = imagecreatefromjpeg("captcha.jpg");
    $testo = imagecolorallocate($immagine, 0, 0, 0);
    $font = imageloadfont("captcha.gdf");
    imagestring($immagine, $font, 1, 3, $risultato, $testo);
    $_SESSION['controllo_captcha'] = $risultato;
    header("Content-type: image/jpeg");
    imagejpeg($immagine);
    ?>
    [/PHP]

    Il file captcha.jpg deve essere un immagine 85x30, ti allego quella che uso io. Poi nella stessa cartella devi mettere il font in formato gdf, ti allego zippato quello che uso io.

    poi in fondo al form metti una cosa del genere:
    [HTML]
    <tr>
    <td>Codice di controllo</td>
    <td>
    <img src="captcha.php"><br>
    Il codice qui sopra è <input type="text" name="chiave">
    </td>
    </tr>
    [/HTML]

    e prima di mandare un'email fai questo semplcie controllo
    [PHP]
    if($chiave!="" AND $_SESSION['controllo_captcha']==$chiave) {
    // manda email
    }else{
    // segnala che il codice è sbagliato
    }
    [/PHP]

    Molto più semplice di quelli complessi che salvano file e cose del genere. Poi questo è molto personalizzabile, puoi mettere la foto che vuoi al posto dei numeri o puoi modificare il file usando imagettftext invece di imagestring, così puoi usare qualsiasi font ttf.

    si si...andrebbe bene però se ho un server linux.....

    invece avendo un server windows le librerie GD non le ho disponibili e di conseguenza non posso usare nessun sistema captcha

    ciao


  • Bannato User Attivo

    vabbè, provo allora a pensarne una io, ditemi se è un sistema sicuro

    mettiamo il caso che ad ogni form compare una domanda a semplice testo del genere:

    fai la somma di tre con cinque e dividilo per due

    dove può variare in:

    addiziona tre con cinque e dividi per due
    fai tre più cinque e il risultato dividilo per due
    ecc....

    Secondo voi un bot riesce a capire? :mmm:

    chiaramente se il risultato viene sbagliato, una,due,tre volte poi gli viene bloccato l'accesso ad ip, che dite?


  • User Attivo

    Sì è fattibile, l'ho già visto su un altro sito. Però limitati ad una addizione fra tre numeri, altrimenti ti saltano fuori i decimali....


  • Bannato User Attivo

    @scar81 said:

    Sì è fattibile, l'ho già visto su un altro sito. Però limitati ad una addizione fra tre numeri, altrimenti ti saltano fuori i decimali....

    ora che ci penso avevano messo su un antibot che anche senza librerie grafiche ti metteva in rand 4 immagini di donne, e se tu selezionavi quella più brutta andavi avanti con il form :yuppi:

    non ricordo il nome...azz :D:D


  • User Attivo

    Ma quello è soggettivo! 🙂


  • Bannato User Attivo

    difficile che ora c'è un server bot cosi intelligente come contempt 😄

    Inizialmente pensavo di mettere calcoli più complessi, ma poi ho facilitato un pò 😄

    stavo pensando di fare anche una variazione con le lettere del tipo:

    Se io metto le lettere OTSET al contrario cosa leggo? 😄

    oppure

    Il contrario di veloce?
    Il sinonimo di.....ecc...

    oppure mettere questo gioco di parole abbinato ai calcoli :mmm:

    Collegato a un database di un migliaglio di parole può essere veramente un sistema intaccabile.

    che ne pensate?


  • User Attivo

    Se dovessi compilare un modulo dove mi fano una domanda del genere non capirei perchè la fai e ti prenderei per matto.
    Fai così, crea una decina di captcha a mano (cioè non automatici, con paint o qualcosa del genere) e ogni volta ne carichi uno a random. Ogni tanto ne rifai una decina e vai avanti così. Tanto nessuno si sbatterebbe per fare un bot solo per il tuo sito, perchè dovrebbe modificarlo in continuazione.


  • Bannato User Attivo

    @scar81 said:

    Se dovessi compilare un modulo dove mi fano una domanda del genere non capirei perchè la fai e ti prenderei per matto.
    Fai così, crea una decina di captcha a mano (cioè non automatici, con paint o qualcosa del genere) e ogni volta ne carichi uno a random. Ogni tanto ne rifai una decina e vai avanti così. Tanto nessuno si sbatterebbe per fare un bot solo per il tuo sito, perchè dovrebbe modificarlo in continuazione.

    si all'inizio avevo fatto uno script di random image, ma il fatto è che alla fine il il bot capisce eccome... per esempio potrebbe prendere nota della grandezza totale dell'immagine o del numero di colori....tanto voglio dire le immagini che girano sono sempre le stesse :sbav: 😄

    img1.jpg
    img2.jpg
    img3.jpg

    e anche se nascoste sotto i get image per non mostrare il nome file non servirebbe poi a molto, con il captcha invece utilizzano la variazione dei colori proprio perchè i numeri vengono mstrati sempre in modo diverso, o con segni o altri simboli sopra di essi per rendere irriconoscibile l'immagine e incasinare il bot.

    Quindi non so se cosi funziona o sbaglio? :mmm:


  • User Attivo

    E' vero che la mia soluzione non è perfetta, ma per scardinare un sistema del genere un programmatore dovrebbe sbattersi per 1 ora come minimo per creare uno script che entri nel tuo form. E ti basterebbe cambiare le 10 immagini per buttare all'aria tutto il suo lavoro.
    Lo farebbe solo se ne avesse un guadagno in termini di tempo. Ma se deve metterci un'ora per fare un sistema automatico, tanto vale che ti spamma a mano no??


  • Bannato User Attivo

    @scar81 said:

    E' vero che la mia soluzione non è perfetta, ma per scardinare un sistema del genere un programmatore dovrebbe sbattersi per 1 ora come minimo per creare uno script che entri nel tuo form. E ti basterebbe cambiare le 10 immagini per buttare all'aria tutto il suo lavoro.
    Lo farebbe solo se ne avesse un guadagno in termini di tempo. Ma se deve metterci un'ora per fare un sistema automatico, tanto vale che ti spamma a mano no??

    No credimi con i sistemi che ci sono oggi niente diventa impossibile, con un sistema che ti ho fatto vedere io penso che un programmatore con le balls arriva a trovare un modo per baipassarlo in pochi minuti.

    E' per questo che stò impiegando parecchio tempo a capire come renderlo invulnerabile.

    Solo che il punto è questo, già come ho creato io il sistema è fin troppo noioso per un utente andarlo ad eseguire tutto per filo e per segno, figurati se lo incasino ancora di più.

    Stavo pensando comunque di metterci anche un controllo ip, nel senso che se uno sbaglia più di tre volte è fuori gioco e e al posto di contempt.php gli viene cambiato con la stessa pagina ma senza uscita in contempt2.php cosi che avrà tutto il tempo che vuole per giocare 😄

    Comunque qualche rand con piccole immagini di pochi pixel la devo pur fare, abbinata magari a quello che già c'è ora :sbav:

    e qui però chiedo aiuto... come faccio a nascondere il nome delle immagini?

    del tipo che il bot potrebbe andare a cercare;

    <img src="numerocinque.jpg"> diverso da <img src="numerodue.jpg">

    e ottenere 52

    come le nascondo?


  • User Attivo

    Non credo di aver ben capito cos'hai in mente, comunque puoi fare un semplice file immagine.php che apre il file che decidi tu e restituisce l'immagine con un header("Content-type: image/jpeg");
    Il valore lo salvi in sessione e lo recuperi nel file con il form, per fare il confronto.


  • Bannato User Attivo

    @scar81 said:

    Non credo di aver ben capito cos'hai in mente, comunque puoi fare un semplice file immagine.php che apre il file che decidi tu e restituisce l'immagine con un header("Content-type: image/jpeg");
    Il valore lo salvi in sessione e lo recuperi nel file con il form, per fare il confronto.

    aspetta non penso di aver capito, ho provato cosi:

    [PHP]header("Content-type: image/jpeg");
    $var=fopen("immagine.jpg","r");
    $var2=fread($var,filesize("immagine.jpg"));
    echo "<img src='$var2'>";[/PHP]

    o con include "jpg";

    ma ottengo tutti caratteri particolari e nessuna immagine

    che devo scrivere? :mmm:


  • User Attivo

    Prova con
    [PHP]
    header("Content-type: image/jpeg");
    $contents = file_get_contents("immagine.jpg");
    echo $contents;
    exit(0);
    [/PHP]
    metti questo codice in un file immagine.php che richiamerai da un <img> come se fosse un immagine.


  • Bannato User Attivo

    @scar81 said:

    Prova con
    [PHP]
    header("Content-type: image/jpeg");
    $contents = file_get_contents("immagine.jpg");
    echo $contents;
    exit(0);
    [/PHP]
    metti questo codice in un file immagine.php che richiamerai da un <img> come se fosse un immagine.

    Ohhh...ora si che è completo contempt 😄

    senza creare tanti file php ho immesso i file get contents dentro constanti nella stessa pagina:

    come puoi vedere nel codice sorgente andando a visualizzare un numero cosi, ogni volta che fai un refresh cambia continuamente, quindi dinamico 😄

    ciao 🙂


  • User Newbie

    Ciao 🙂 volevo ringraziarvi perchè grazie a questa discussione, dopo giorni e giorni :arrabbiato: ho finalmente risolto il mio problema con il captcha!!! Grazieeeeeeeee!!!! :sun: