Visualizzazione risultati 1 fino 16 di 16

Discussione: problema con captcha

  1. #1
    Guest

    Predefinito problema con captcha

    salve a tutti!
    ho un problema e una domanda riguardo ad un numero di controlla (captcha) del mio guestbook.

    iniziamo con il problema: in parole povere, nonostante non mi sembra che ci siano errori, qualsiasi cosa scrivi come codice di controllo va bene e il commento viene inserito lo stesso.

    domanda: è davvero utile usare GET per inviare il numero all'immagine? francamente lo uso perchè non riuscivo a costruire una struttura adatta per usare POST...

    di seguito il codice del mio guestbook:
    Codice PHP:
    <a href="http://gabriballets.altervista.org/guestbook.php">Leggi i commenti!</a><br><br><br>
    <?php
    srand
    ((double)microtime()*1000000);
    $numero = rand(100000,999999);
    ?>
    <b><font size=3 color=#317CB5>Lascia un commento:</font></b><br><br>
    <form method="post" name="modulo">
    <table>
    <tr><td>Nome</td><td><input name="nome" TYPE="text" maxlength=30></input></td></tr>
    <tr><td>Messaggio</td><td><textarea name="messaggio" maxlength=501></textarea></td></tr>
    <tr><td></td><td><img src="guestbook/immagine.php?codice=
    <?php
    echo $numero;
    ?>
    "></td></tr>
    <tr><td>Codice numerico</td><td><input name="codice" TYPE="text" maxlength=6></input></td></tr>
    <tr><td></td><td><input type="submit" name="invia" value="Invia" id="invia"></input></td></tr>
    </table><br><br>
    <div align=left>
    <font size=-2>
    L'immediatezza della pubblicazione dei commenti non permette filtri preventivi, il proprietario del sito non potrà essere ritenuto responsabile per eventuali messaggi lesivi di diritti di terzi e potrà in qualsiasi momento, a suo insindacabile giudizio, cancellare i messaggi.<br><br>
    In tutti i casi l'ip di chi scrive verrà registrato (ma non reso pubblico).<br><br>
    La lunghezza massima dei commenti è di 500 caratteri.
    </font></div>

    <?
    $file
    = "*****/*********.txt";
    $caratteri = strlen($_POST['messaggio']);
    // Scrittura del file
    if ($_POST['nome'] != "" && $_POST['messaggio'] != "" && $_POST['codice'] = $numero && $caratteri < 501)
    {
    $contenuto = file_get_contents($file);
    $scrivi_file=fopen($file,"w");
    fwrite($scrivi_file,"<tr><td align=left><b><font color=#317CB5>".Strip_Tags($_POST['nome'])."</font></b></td><td align=right><font size=-2>".date('d-m-Y')." ".date('H:i:s')."</font></td></tr><tr><td align=justify colspan=2>".Strip_Tags($_POST['messaggio'])."</td></tr><tr><td align=justify colspan=2><hr width=99% color=e6e6e6><br></td></tr>".$contenuto."");
    fclose($scrivi_file);
    mail("gabri.ballets@fastwebnet.it", "Commento!", "".$_SERVER['REMOTE_ADDR']." - Qualcuno ha commentato il tuo guestbook!");
    }


    ?>
    Grazie mille per la vostra infinita disponibilità!

  2. #2
    Guest

    Predefinito

    L'utilizzo di get e post non si differenziano (a parte il limite di get, ma questo è un altro discorso).

    Riguardo al problema, prova a stampare tutti i valori del tuo script (che non ho controllato).


    Ciao!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    L'utilizzo di get e post non si differenziano (a parte il limite di get, ma questo è un altro discorso).
    Grazie debug, rapido come sempre!

    però guarda qui, se vai sulle proprietà dell'immagine ti appare 'codice=######' bello chiaro e temevo che fosse possibile risalire al codice in questo modo...per questo mi chiedevo se fa bene il suo lavoro!
    grazie

  4. #4
    L'avatar di hackharo
    hackharo non è connesso Utente
    Data registrazione
    26-01-2007
    Messaggi
    120

    Predefinito

    Semplice...l'errore è che per confrontare devi usare 2 uguali e non solo 1!
    se ne usi uno la condizione è sempre vera!

    $_POST['codice'] == $numero

    p.s: adesso ho capito anch'io il problema...con post non funzionerebbe...per queste cose conviene usare le sessioni...
    Ultima modifica di hackharo : 21-03-2008 alle ore 14.53.30
    Non fare oggi quello che non hai fatto per convinzione ieri...

  5. #5
    Guest

    Predefinito

    Ah scusa, ma avevo capito che non ti funzionava! (forse colpa dell'abitudine)

    No, non va bene che il codice sia in chiaro, altrimenti non serve a nulla il captcha.
    Mettilo in md5 (o un altro tipo di hash).


    Ciao!

  6. #6
    Guest

    Predefinito

    grazie a entrambi...ora correggo i = in ==...
    per quanto riguarda l'md5 sarà meglio se mi informo perchè ignoro completamente cosa sia!
    grazie mille!

  7. #7
    Guest

  8. #8
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non può funzionare quello che hai scritto.
    Generi un numero random, ma nel momento in cui aggiorni la pagina per inserire il commento il numero cambia.

    Se cerchi in rete trovi alcuni esempi di captcha.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  9. #9
    Guest

    Predefinito

    ho guardato un po qua e la ma francamente non ho trovato guide sufficientemente chiare da poter adattare al caso mio, e non mi va di usare qualcosa di prefatto senza averne capito bene il comportamento.

    Mi è quindi venuta un'idea:
    in un file .txt (io amo salvare i dati sui file di testo!) scrivo una cosa del tipo:
    Codice:
    <?php
    $numero=123456;
    ?>
    sarà il numero da inserire nel campo di controllo e che apparirà nell'immagine.
    se il numero inserito è corretto oltre a inserire l'articolo creo un nuovo numero casuale e lo sostituisco a quello esistente.

    La cosa è certamente realizzabile, e il problema che più persone firmino negli stessi istanti è trascurabile.

    Secondo voi è valido un controllo del genere?

  10. #10
    Guest

    Predefinito

    No, è la tecnica sbagliata.
    Devi generare una stringa casuale che dovrai stampare tramite le GD (come già fai) e che hasherai (passatemi il termine) con md5 ed inserendolo in un campo nascosto del form.
    All'invio di quest'ultimo lo script controllerà se i due hash corrispondono o meno, facendo

    md5($numero_immesso)==$campo_nascosto


    Ciao!

  11. #11
    Guest

    Predefinito

    Ora provo, ma non ho capito una cosa:
    creo un numero casuale $numero, faccio: md5($numero); e lo inserisco nel campo hidden per poi fare il controllo, ma come faccio a richiamarlo per l'immagine?
    (traduzione: poi nell'immagine mi apparirebbe quel codice esadeciamle, come faccio a "rimettere il numero"?)

    scusa per l'incomprensibilità del messaggio ma non riesco a spiegarmi!

  12. #12
    Guest

    Predefinito

    Partiamo dalla base: hai già implementato la generazione dinamica dell'immagine che rappresenta la stringa alfanumerica che l'utente deve scrivere?
    Se sì, allora spiego il passo successivo.

    Lo stesso script che genera l'immagine deve anche "dichiarare" la stringa in chiaro, per poi essere passata con md5 e hashata.
    Questo hash (stringa alfanumerica di 32 caratteri) lo inserisci nel campo nascosto e che quindi sarà inviato insieme a tutti gli altri campi del form.
    Il confronto lo fai semplicemente hashando ciò che ti passa l'utente (che te lo passa ovviamente in chiaro) con l'hash contenuto nel campo nascosto.


    Ciao!

  13. #13
    L'avatar di hackharo
    hackharo non è connesso Utente
    Data registrazione
    26-01-2007
    Messaggi
    120

    Predefinito

    Non capisco perchè accanirsi con questa criptazione...

    è semplicissimo basta che
    a)generi il numero casuale $numero = rand(1, 1000);

    b)apri una sessione e ci salvi il numero
    session_start();
    $_SESSION['numero_captcha'] = $numero;

    c)modifichi il file che genera l'immagine dinamicamente che dovrebbe essere una cosa del genere:

    $numero = $_GET['codice'];

    in:

    session_start();
    $numero = $_SESSION['numero_captcha'];

    e hai risolto...
    Almeno, io uso questo metodo e mi trovo bene...
    Non fare oggi quello che non hai fatto per convinzione ieri...

  14. #14
    Guest

    Predefinito

    Sono in momenti come questo che mi sento veramente ignorante...

    Ma se la stringa col numero la "creo" nello script dell'immagine, come lo passo a quello per il controllo?

    Grazie per la pazienza!

  15. #15
    Guest

    Predefinito

    Dentro allo script che ti genera il captcha ti basta creare una variabile con la stringa; questa sarà disponibile anche alla pagina che include tale script.


    Ciao!

  16. #16
    L'avatar di hackharo
    hackharo non è connesso Utente
    Data registrazione
    26-01-2007
    Messaggi
    120

    Predefinito

    Guarda qui secondo me è spiegato bene...
    http://www.captcha.biz/captcha-itali...-spiegato.html
    e se hai bisogno poi chiedi...
    Non fare oggi quello che non hai fatto per convinzione ieri...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •