Visualizzazione risultati 1 fino 12 di 12

Discussione: passare codice del captcha in maniera sicura

  1. #1
    Guest

    Predefinito passare codice del captcha in maniera sicura

    Da un modulo passavo il valore della immagine captcha con un parametro nel modulo hidden.

    Ovviamente però in questo modo il valore è leggibile guardando dal codice sorgente della pagina, e questo si presta facilmente ad essere letto in automatico dal malfattore che fa un attacco automatico.

    Ho provato a passarlo come variabile di sessione, ma mi pare di capire che se noi settiamo ADESSO, in questa pagina il valore della variabile di sessione, cliccando sul submit il valore non viene trasmesso, in quanto il valore di una variabile di sessione è disponibile NON nella pagina dopo, ma in quella DOPO ANCORA..

    (non so se mi sono spiegato, inoltre è una mia supposizione..)

    Se questo è vero come devo fare a passare sto benedetto valore da una pagina all'altra ma in maniera sicura?..

  2. #2
    Guest

    Predefinito

    Usa una sessione , che poi cancelli subito dopo aver "controllato" il captcha .
    Io uso questa :)

    Ho visto questo proprio ora xD (che c... fortuna !!) :
    http://forum.html.it/forum/showthrea...readid=1099007
    Ultima modifica di comunitavirtuali : 13-03-2007 alle ore 20.32.25

  3. #3
    Guest

    Predefinito

    Signori ho capito il problema seguitemi perche è complicato e temo inoltre che sarò preso per pazzo...

    In pratica il problema è la funzione rand() che mi genera il codice di 6 cifre della captcha.

    La funzione rand() si appoggia, per il suo funzionamento, al tempo.. Per fare una prova facciamo che il codice della captcha sia il valore restituito da time(), il che è praticamente la stessa cosa..

    In pratica a grandi linee:

    Codice:
    $numero_random = time(); //il numero che comparirà sulla captcha sarà così un valore espresso in secondi.
    
    $_SESSION['valore_nascosto'] = $numero_random; //Questa è la variabile di sessione
    
    genera_e_stampa_immagine_captcha($numero_random); // Questa funzione mi stampa l'immagine captcha, con stampato sopra le cifre di time()
    
    <input campo text che inserisce l'utente />
    
    e quindi il submit
    
    echo  $_SESSION['valore_nascosto']; // questo lo metto per osservare il valore di sessione che alla pressione di SUBMIT dovrà essere uguale al valore inserito dall'utente nel campo di testo.
    In pratica il tutto funzionerebbe perfettamente, il problema è che la pagina ha una URL modificata con htaccess, questo (suppongo) faccia perdere al server del tempo prezioso o qualcosa di simile.
    Questo lo vedo per il fatto che dopo il submit, al rigenerarsi della pagina, se stampo il valore della variabile di sessione, è PIU LUNGO, di poco, rispetto al tempo che avevo visto prima di premere il submit.

    In sostanza il valore della variabile di sessione viene STRANAMENTE cambiato nel frattempo e viene mandata alla pagina successiva un valore diverso e piu lungo!

    I punti salienti di tutto questo discorso, per chiarezza, sono:
    - Se non uso htaccess funziona perfettamente. La pagina in cui si trova il form DEVE essere la URL originale.
    - Se $numero_random = "CICCIO" (anziche un valore generato da time() ) funziona perfettamente, con o senza htaccess...
    - Se passo il valore, anziche con la variabile di sessione, con un semplice campo hidden, FUNZIONA PERFETTAMENTE anche con htaccess!!

    Ho attualmente risolto il problema passando il valore tramite parametro hidden nel form. Era la soluzione che volevo evitare ma per il momento inevitabile. Se avete qualche suggerimento su come creare una captcha sicura sono qui, altrimenti tenete a mente che può verificarsi questo problema..
    Ultima modifica di attorianzo : 16-03-2007 alle ore 03.49.53

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ma tu nella pagina in cui controlli il valore del CAPTCHA non fai così?
    Codice PHP:
    if ($_SESSION['valore_nascosto']==$_POST['captchadellutente']) {
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool
    Ma tu nella pagina in cui controlli il valore del CAPTCHA non fai così?
    Codice PHP:
    if ($_SESSION['valore_nascosto']==$_POST['captchadellutente']) {
    In testa alla pagina dove dovrei controllare il valore del captcha, faccio direttamente così:

    print_r($_SESSION);
    print_r($_POST);

    Allo scopo di ottenere il valore della variabile di sessione e $_POST, meno inquinate possibile.

    ..Il valore passato con la sessione risulta essere leggermente piu lungo di quello passato con il metodo POST.
    Ultima modifica di attorianzo : 16-03-2007 alle ore 18.14.49

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da attorianzo
    Il valore passato con la sessione risulta essere leggermente piu lungo di quello passato con il metodo POST.
    Al posto di "CICCIO" cosa esce?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool
    Al posto di "CICCIO" cosa esce?
    Scusa se ti rispondo solo adesso.. Ma mi sono accorto per caso che avevi risposto, dal momento che ho scoperto che anche la mia casella email.it si rifiuta di ricevere le email dal forum di altervista.. (bah!)

    Intendi dire se cerco di passare come variabile di sessione "CICCIO" ? Passa CICCIO senza problemi. Gli unici problemi che riscontro, sono solo quando cerco di passare una variabile che prende il valore da una instruzione tipo time() o rand (vedi il mio post numero 3)

  8. #8
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Non è che generi il numero random più volte?

    Citazione Originalmente inviato da attorianzo
    Scusa se ti rispondo solo adesso.. Ma mi sono accorto per caso che avevi risposto, dal momento che ho scoperto che anche la mia casella email.it si rifiuta di ricevere le email dal forum di altervista.. (bah!)
    Ho aperto questa discussione a riguardo.
    Ultima modifica di funcool : 18-03-2007 alle ore 10.36.18
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  9. #9
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Io ho risolto così

    Codice:
    <?
    session_start();
    if(!$_SESSION["codice"]) {
    $_SESSION["codice"] = time();
    }
    
    //ecc..
    ?>
    Praticamente se la sessione codice non esiste la crea, l'unico problema è che il captcha non varia fino a che l'utente non se ne va..
    Ultima modifica di Leo91 : 18-03-2007 alle ore 13.51.32

  10. #10
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da Leo91
    Codice:
    if(!_SESSION["codice"] == "") {
    Al posto del punto esclamativo ci volevi mettere il simbolo del dollaro, giusto?

    Forse un codice più corretto sarebbe:
    Codice PHP:
    if (!isset($_SESSION['codice']) || $_SESSION['codice']=="") {
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  11. #11
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

  12. #12
    incuso non è connesso Utente
    Data registrazione
    27-09-2003
    Messaggi
    173

    Predefinito

    Come meccanismo per passare il valore nascondendolo, io uso srand(). In pratica :

    $rgen=rand();
    srand($rgen);
    $numerocaptcha=(rand()*2+173)%1000; // qui mettere una formula piú complessa

    come campo hidden passo $rgen che viene passato anche allo script che genera il cap[tcha. Sia quest ultimo che lo script che interpreta i dati immessi nella form utilizzano le stesse righe per ricostruire il numero mostrato dal captcha. (Esempio in: http://numismatica-italiana.lamoneta...istrazione.php )

    Certo, se uno fa un po' di prove poi la formula te la trova, tuttavia il grado di sicurezza è ragionevole e comunque si possono introdurre ulteriori complicazioni.

Regole di scrittura

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