2014-11-25 11 views
8

Qualcuno può chiarire per favore quale è l'ultima pagina della documentazione recaptcha, la trovo eccezionalmente ottusa.Documentazione Recaptcha poco chiara - e test di errore cross-site

Ecco la documentazione non riesco a capire:

Verifica la risposta dell'utente

Questa pagina spiega come verificare la risposta di un utente a una sfida reCAPTCHA dal backend dell'applicazione. Quando un reCAPTCHA viene risolto dall'utente , un nuovo campo (g-recaptcha-response) verrà popolato nel codice HTML . È possibile verificare la risposta dell'utente in uno dei tre modi:

parametro POST g-recaptcha-response quando l'utente invia il modulo su sito. grecaptcha.getResponse (opt_widget_id) dopo che l'utente completa la sfida CAPTCHA. Come un argomento stringa alla funzione di callback se i dati-callback è specificato sia nel g-recaptcha tag attributo o il parametro di callback nel metodo grecaptcha.render

API Richiesta

URL: https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address

In che modo posso "verificare"?

Dice che ci sono tre modi in cui posso "verificare la risposta dell'utente", quindi prendiamo il primo: c'è ora un parametro POST nel modulo inviato chiamato g-recaptcha-response con alcuni contenuti gobbledygook. La mia domanda è: ora cosa? Devo solo controllare che non sia nullo?

Oppure devo inviarlo a google utilizzando la richiesta API di seguito indicata e quindi controllare la risposta? Questo potrebbe avere senso, ma sarebbe bello se lo scrivessero i documenti, invece dice semplicemente "Richiesta API". Sarebbe anche bello se lo spiegassero che il response_string è (presumibilmente) il contenuto del parametro g-recaptcha-response.

Ovviamente la mia istruzione costosa non era abbastanza costosa, per favore qualcuno potrebbe confermare per la mia tranquillità che dovrei fare la richiesta API.


Questo mi porta al secondo problema: è possibile verificare che il widget recaptcha funziona bene dalla macchina locale, ma non è possibile verificare l' 'API richiesta' - ottengo un errore di cross-site

XMLHttpRequest non può caricare https://www.google.com/recaptcha/api/siteverify. Nessuna intestazione 'Access-Control-Allow-Origin' è presente sulla risorsa richiesta. L'origine 'http://localhost' non è quindi consentita l'accesso.

Qualcuno conosce un modo per aggirare questo in modo da poter eseguire test?

risposta

4

Da quello che stai dicendo sembra che il tuo problema principale sia che stai verificando la risposta dell'utente nel browser dell'utente piuttosto che sul server. È vero?

Giusto per chiarire, quello che succede è ...

  • Mostrate il widget recaptcha nel modulo client.
  • L'utente compila in.
  • Il widget fa alcune cose intelligenti e il vostro cliente ora ha un response_string, disponibili nella tua forma come campo g-recaptcha-response (è anche possibile ottenere utilizzando gli altri due metodi JavaScript che menzionano).
  • Quando l'utente invia il modulo, assicurarsi che il server riceva lo response_string insieme a tutti gli altri dati del modulo.
  • Sul server è necessario effettuare una richiesta a https://www.google.com/recaptcha/api/siteverify. Il modo in cui lo fai dipenderà dalla lingua che stai utilizzando sul server. Dovrebbe essere facile Riceverai una risposta dicendo se l'utente ha ottenuto il captcha giusto oppure no.
+1

Grazie per la risposta. Dopo molte torture ho finalmente lavorato tutto da solo, ma non grazie alla documentazione. Ho anche perso un sacco di tempo cercando di verificare dal browser, hai ragione: di nuovo, un'altra trappola che la documentazione avrebbe potuto esplicitare, giusto? – mwarren

+1

Sì, sono cose fondamentali che hanno dimenticato di menzionare! Era la mia prima volta che lavoravo con il recaptcha oggi e mi stavo anche grattando la testa. – chichilatte

+0

@chichilatte Sto usando Java sul lato server per convalidare la risposta g-recaptcha, ma sto ricevendo IOException: ** Ho provato tutti: 1 indirizzi, ma non sono riuscito a connettermi tramite HTTPS al server: porta google.com: 443 * *. Sto cercando di connettermi all'URL: ** https: //google.com/recaptcha/api/siteverify** (provato con e senza www, ma lo stesso errore). Quale potrebbe essere la causa di ciò? –

8

Forse questo post sarà utile, in quanto mostra frammenti esatte di codice sia da back-end, e prespectives frontend:

http://www.codedodle.com/2014/12/google-new-recaptcha-using-javascript.html

codice PHP:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // Construct the Google verification API request link. 
    $params = array(); 
    $params['secret'] = 'Your secret key here.'; // Secret key 
    if (!empty($_POST) && isset($_POST['g-recaptcha-response'])) { 
     $params['response'] = urlencode($_POST['g-recaptcha-response']); 
    } 
    $params['remoteip'] = $_SERVER['REMOTE_ADDR']; 

    $params_string = http_build_query($params); 
    $requestURL = 'https://www.google.com/recaptcha/api/siteverify?' . $params_string; 

    // Get cURL resource 
    $curl = curl_init(); 

    // Set some options 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $requestURL, 
    )); 

    // Send the request 
    $response = curl_exec($curl); 
    // Close request to clear up some resources 
    curl_close($curl); 

    $response = @json_decode($response, true); 

    if ($response["success"] == true) { 
     echo '<h3 class="alert alert-success">Login Successful</h3>'; 
    } else { 
     echo '<h3 class="alert alert-danger">Login failed</h3>'; 
    } 
} 
+1

non dovrebbe il metodo di arricciatura usato qui essere POST come menzionato nella documentazione? – Amjo

+0

@ Amjo Non l'ho capito, e cos'è adesso? – ProllyGeek