Utilizzo di reCAPTCHA con PHP

Importante: la versione 1.0 dell'API reCAPTCHA non è più supportata, esegui l'upgrade alla versione 2.0. Scopri di più

La libreria PHP di reCAPTCHA offre un modo semplice per inserire un CAPTCHA nel tuo sito web PHP, aiutandoti a impedire ai bot di utilizzarlo in modo illecito. La libreria racchiude l'API reCAPTCHA.

Per utilizzare reCAPTCHA con PHP, puoi scaricare la libreria PHP di reCAPTCHA. Ti servirà un solo file da lì (recaptchalib.php). Gli altri file sono esempi, file Leggimi e elementi legali e non influiscono sulla funzionalità del file.

Avvio rapido

Dopo aver effettuato la registrazione per le chiavi API, di seguito sono riportate le istruzioni di base per installare reCAPTCHA sul tuo sito. Di seguito puoi trovare una guida di riferimento completa al plug-in PHP.

Lato client (come visualizzare l'immagine del CAPTCHA)

Se vuoi utilizzare la libreria PHP per visualizzare il widget reCAPTCHA, devi inserire questo snippet di codice all'interno dell'elemento <form> dove verrà inserito il widget reCAPTCHA:

  require_once('recaptchalib.php');
  $publickey = "your_public_key"; // you got this from the signup page
  echo recaptcha_get_html($publickey);

Con il codice, il modulo potrebbe avere un aspetto simile al seguente:

  <html>
    <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
      <!-- your HTML content -->

      <form method="post" action="verify.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "your_public_key"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>

      <!-- more of your HTML content -->
    </body>
  </html>

Non dimenticare di impostare $publickey sostituendo your_public_key con la tua chiave pubblica API.

Tieni presente che il valore dell'attributo "action" è "verify.php". A questo punto, verify.php è il file di destinazione a cui vengono inviati i valori di questo modulo. Dovrai quindi avere un file verify.php nella stessa posizione dell'html del client.

La funzione request_once nell'esempio precedente prevede che recaptchalib.php si trovi nella stessa directory del file del modulo. Se si trova in un'altra directory, devi collegarlo in modo appropriato. Ad esempio, se recaptchalib.php si trova nella directory "captcha", che si trova allo stesso livello del file del modulo, la funzione sarà simile alla seguente: require_once('captcha/recaptchalib.php').

Lato server (come verificare se l'utente ha inserito la risposta corretta)

Il seguente codice deve essere posizionato all'inizio del file verify.php:

  <?php
  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }
  ?>

Nel codice riportato sopra:

  • recaptcha_check_answer restituisce un oggetto che rappresenta se l'utente ha completato la verifica con successo.
  • Se il valore $resp->is_valid è true, la verifica captcha è stata completata correttamente e devi continuare l'elaborazione del modulo.
  • Se $resp->is_valid è false, l'utente non è riuscito a fornire il testo corretto del captcha e dovresti visualizzare di nuovo il modulo per consentire un altro tentativo. In questo caso $resp->error sarà un codice di errore che può essere fornito a recaptcha_get_html. Se passi il codice di errore, il controllo reCAPTCHA mostrerà un messaggio che spiega che l'utente ha inserito il testo in modo errato e deve riprovare.
  • Tieni presente che questo codice richiede la chiave privata, che non deve essere confusa con la chiave pubblica. La troverete dalla stessa pagina della chiave pubblica.

    Assicurati inoltre che il modulo sia impostato in modo da ricevere le variabili del modulo utilizzando $_POST anziché $_REQUEST e che il modulo stesso utilizzi il metodo POST.

    È tutto. Ora reCAPTCHA dovrebbe funzionare sul tuo sito.

    Per approfondire

  • Personalizzazione di aspetto e design
  • Suggerimenti e linee guida
  • Risoluzione dei problemi
  • Guida di riferimento per il plug-in PHP

    Di seguito è riportato un elenco completo di tutti i metodi del plug-in PHP reCAPTCHA.

    La funzione recaptcha_get_html

    La funzione recaptcha_get_html mostra all'utente il codice HTML che presenta reCAPTCHA.

    recaptcha_get_html
    Parametro
    $pubkey -- stringa. obbligatoria. La tua chiave pubblica reCAPTCHA, dalla pagina di registrazione dell'API
    $error -- stringa. facoltativo (nullo è il valore predefinito) Se questa stringa è impostata, l'area reCAPTCHA mostrerà il codice di errore fornito. Questo codice di errore proviene da ReCaptchaResponse->$error
    $use_ssl -- booleano. facoltativo (il valore predefinito è falso) Deve essere utilizzata l'API basata su SSL? Se visualizzi una pagina all'utente tramite SSL, assicurati di impostarlo su true in modo che non venga visualizzata una finestra di dialogo di errore nel browser dell'utente.
    Valore restituito Una stringa contenente codice HTML da inserire nella pagina web.

    La funzione recaptcha_check_answer

    Dopo che l'utente ha compilato il modulo HTML, inclusa la risposta al CAPTCHA, vogliamo verificare la risposta quando l'utente invia il modulo utilizzando la funzione recaptcha_check_answer. La risposta dell'utente sarà in due campi del modulo, recaptcha_challenge_field e recaptcha_response_field. La libreria reCAPTCHA invierà una richiesta HTTP al server reCAPTCHA e verificherà la risposta dell'utente.

    recaptcha_check_answer
    Parametro
    $privkey -- stringa obbligatoria. La tua chiave privata reCAPTCHA, dalla pagina di registrazione dell'API.
    $remoteip -- stringa. obbligatoria. L'indirizzo IP dell'utente, nel formato 192.168.0.1
    $challenge -- stringa. obbligatoria.
    Il valore del campo recaptcha_challenge_field nel modulo
    $response -- stringa. obbligatoria Il valore del campo recaptcha_response_field del modulo
    Valore restituito Un'istanza della classe ReCaptchaResponse

    ReCaptchaResponse
    Campo
    $is_valid -- booleano reCAPTCHA credeva che la risposta fosse valida?
    $error -- stringa Se la risposta non era valida, qual è stato il problema? Questo codice di errore può essere utilizzato in recaptcha_get_html
    Valore restituito L'URL HTML o non elaborato per decodificare l'indirizzo email, a seconda della funzione chiamata.

    Mailhide

    La libreria PHP di reCAPTCHA include associazioni per l'API Mailhide. Questa API consente di includere un'email in un reCAPTCHA per evitare che gli spammer lo vedano: esame...@example.com.

    La parte Mailhide della libreria PHP richiede il modulo PHP mcrypt.

    L'API Mailhide è costituita da due funzioni recaptcha_mailhide_html e recaptcha_mailhide_url. Le funzioni hanno gli stessi parametri. La versione _html restituisce codice HTML che può essere inserito direttamente nella pagina web. La parte del nome utente dell'email che viene trasmessa viene troncata e sostituita con un link che chiama Mailhide. La versione _url fornisce l'URL per decodificare l'email e spetta a te posizionarla in HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Parametro
    $pubkey -- stringa La chiave pubblica Mailhide dalla pagina di registrazione
    $privkey -- stringa La chiave privata Mailhide dalla pagina di registrazione.
    $email -- stringa L'indirizzo email che vuoi nascondere.

    Nell'esempio seguente viene illustrato come utilizzare Mailhide:

    <html><body>
    <?
    require_once ("recaptchalib.php");
    // get a key at http://www.google.com/recaptcha/mailhide/apikey
    $mailhide_pubkey = '';
    $mailhide_privkey = '';
    ?>
    The Mailhide encoding of example@example.com is
    <?
    echo recaptcha_mailhide_html ($mailhide_pubkey,
                                  $mailhide_privkey,
                                  "example@example.com");
    ?>.
    <br>
    The url for the email is:
    <?
    echo recaptcha_mailhide_url ($mailhide_pubkey,
                                 $mailhide_privkey,
                                 "example@example.com");
    ?>
    <br>
    </body></html>