Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    17

    Funzione per verificare se recaptcha è corretto non funziona

    Salve a tutti.
    Ho creato questa funzione (basandomi sulla libreria ufficiale di Google) che contatta i server di ReCaptcha con curl e controlla se la risposta inserita dall'utente è corretta.
    Purtroppo, anche se tutto funziona bene durante la comunicazione, l'ultima parte che dovrebbe restituire true se a risposta è corretta e false se questa è sbagliata, non funziona: restituisce sempre false.
    Ecco il codice:

    Codice PHP:
    function VerificaCaptcha($answer$challenge){
        
    $ch curl_init('http://www.google.com/recaptcha/api/verify');
        
    $values = array('privatekey' => 'xxxxxxx',
                              
    'remoteip' => $_SERVER['REMOTE_ADDR'],
                              
    'challenge' => $challenge,
                              
    'response' => $answer);
        
    curl_setopt($chCURLOPT_POSTFIELDS$values);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1); /*questo lo disattivo per controllare se la risposta è davvero corretta*/
        
    $exec curl_exec($ch);
        
    $result explode('\n'$exec);
        if (
    trim($result[0]) == 'true'){
            return 
    true;}
        else {
        return 
    false;}

    Dove sto sbagliando?
    Ultima modifica di Lighty; 16-07-2014 a 16:28

  2. #2
    Prova a fare un var_dump di $exec:

    Codice PHP:
    var_dump($exec); 

    e vedi cosa ti viene fuori.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    17
    Grazie per avermi risposto, Satifal.
    Con var_dump() mi viene fuori string(numero caratteri stringa).

  4. #4
    Dovrebbe venirti fuori anche il contenuto di $exec
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    17
    Infatti il contenuto di $exec è una stringa: se il captcha è corretto viene fuori string(12) "true success", altrimenti string(27) "false incorrect-captcha-sol". Tuttavia, il controllo finale, ovvero il seguente, restituisce sempre false.

    Codice PHP:
    if (trim($result[0]) == 'true'){
            return 
    true;}
        else {
        return 
    false;} 
    Ultima modifica di Lighty; 16-07-2014 a 19:57

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    Cosa riporta $result[0]?
    Perché usi un captcha esterno complicandoti l'operazione?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Se nella stringa restituita dopo il true o il false c'è uno spazio allora è sbagliato l'explode su \n ma devi farlo appunto sullo spazio:

    Codice PHP:
    $result explode(' '$exec); 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    17
    In realtà non è uno spazio ma è diviso in due linee: poi l'interprete HTML non me lo visualizza in due linee. Tuttavia la tua soluzione potrebbe essere valida... Ora la provo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    17
    No, non funziona neanche in questo modo. Tuttavia ho trovato un escamotage che, per quanto potrebbe non essere la soluzione migliore per la sicurezza, funziona.
    Ecco la funzione:

    Codice PHP:
    function VerificaCaptcha($answer$challenge){
        
    $ch curl_init('http://www.google.com/recaptcha/api/verify');
        
    $values = array('privatekey' => 'xxxxxxx',
                              
    'remoteip' => $_SERVER['REMOTE_ADDR'],
                              
    'challenge' => $challenge,
                              
    'response' => $answer);
        
    curl_setopt($chCURLOPT_POSTFIELDS$values);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    $exec curl_exec($ch);
        if (
    strstr($exec'true') != false){
              return 
    true;}
        else {
              return 
    false;}

    Ora, però, in caso Google in futuro mettesse true o false anche nel messaggio di errore che segue true o false, questa funzione non sarebbe più attendibile.

    P.S. cavicchiandrea, cosa intendi per captcha esterno?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.