Un utente ha chiesto
Categoria: Constant Contact Forms di WordPress
Domanda: ReCAPTCHA può essere bypassato

Abbiamo ricevuto invii “spam” per la nostra iscrizione alla newsletter. Ho provato a usare Postman e ho semplicemente rimosso il campo “g-recaptcha-response” dal messaggio. Ti aspetteresti che se reCAPTCHA è configurato nel plug-in, la rimozione completa di questo campo causerebbe un errore, ma non lo è. Invece, otteniamo una risposta di “successo”. Lasciando il campo e lasciandolo vuoto o inserendo un codice non valido funziona come previsto e otteniamo “controllo reCAPTCHA fallito”. Tuttavia, se riesco a rimuovere semplicemente il campo “g-recaptcha-response” e funziona ancora, questo è un bug serio, significa che un bot può pubblicare su /wp-admin/admin-ajax.php usando action = ctct_process_form e bypassare il reCAPTCHA, che sembra succedere a noi.

  • (@geektome)

    Se qualcun altro ha questo problema, fino a quando il plug-in non viene risolto … mettendo qualcosa di simile in functions.php dovrebbe fermare questo buco:

    add_action( 'init', 'recaptcha_init_fix' );
    function recaptcha_init_fix() {
        if ($_REQUEST['action'] == 'ctct_process_form') {
            if (strpos($_REQUEST['data'], 'g-recaptcha-response') === false) {
                $aError['status'] = 'named_error';
                $aError['message'] = 'Failed reCAPTCHA check, g-recaptcha-response is missing.';
                wp_send_json($aError);
                exit;
            }
        }
    }

    Autore del plugin

    (@contatto costante)

    Ciao @geektome

    Molto interessante e sarebbe sicuramente un caso molto mirato, ma anche comunque molto valido. Otterremo queste informazioni e risultati registrati internamente come un problema su cui lavorare e affrontarlo ulteriormente in una versione futura.

    (@bburgay)

    @contatto continuo

    Si prega di correggere questo il prima possibile. I clienti si lamentano e vogliono sbarazzarsi completamente di Constant Contact per questo motivo. Penso che sia lecito ritenere che questo sia anche il problema di tutti gli altri che si lamentano dello spam qui.

    Autore del plugin

    (@contatto costante)

    @geektome e @bburgay Qualcuno di voi può provare la seguente versione del plugin? Il numero di versione non è stato modificato, ma è in atto un cambiamento.

    https://www.dropbox.com/s/0xel5ipd6ayfrf8/constant-contact-forms-recaptcha-bypass-fix.zip?dl=0

    ecco la modifica specifica apportata, all’interno di class-process-form.php

    if ( $this->plugin->settings->has_recaptcha() && ( empty( $data['g-recaptcha-response'] ) ) ) {
    	return array(
    		'status' => 'named_error',
    		'error'  => __( 'We do no think you are human', 'constant-contact-forms' ),
    	);
    }
    

    Controlla se dobbiamo usare reCAPTCHA e quindi se abbiamo un valore di risposta dai dati che stiamo elaborando. Se non lo facciamo, rifiuterà.

    (@geektome)

    Funziona, ma penso che in realtà causi un errore ed è per questo che funziona… La risposta che ricevo è: “Abbiamo avuto problemi nell’elaborazione della tua richiesta. Si prega di controllare le voci e riprovare. Non quello visualizzato nel codice sopra. Il problema non si è mai verificato quando g-recaptcha-response è vuoto, ma quando non esiste affatto … non dovresti usare un isset contro un vuoto? E ora che hai un controllo vuoto su qualcosa che non è definito, probabilmente genera un errore?

    Autore del plugin

    (@contatto costante)

    Basato su https://www.codepunker.com/blog/is-null-vs-empty-vs-isset-one-lesson-all-php-coders-should-learn empty() è il più completo, detto questo, non siamo contrari ad aggiungere un po’ di più a questo controllo, nel caso sia necessario. Dovrebbe essere verificato se il $data['g-recaptcha-response'] l’indice esiste o meno.

    Il messaggio “Abbiamo avuto problemi durante l’elaborazione della tua richiesta. Si prega di controllare le voci e riprovare. l’errore probabilmente deriva dai pochi nonce che controllano il passaggio delle istruzioni.

    Per curiosità e per aiutare a garantire l’uguaglianza dei test, come si fa a testare le richieste? Ad esempio, stai effettuando richieste cURL sulla riga di comando con vari parametri POST impostati? Mi piacerebbe avere qualcosa che potremmo copiare / incollare per testare da parte nostra per aiutare ad affrontare questo argomento in modo più definitivo.

    (@bburgay)

    @contatto continuo

    Non ho avuto il tempo di fare il test, ma sono venuto a vedere se è stato risolto. @geektome ha detto che sta usando Postman per testare: https://www.getpostman.com/. È un ottimo strumento gratuito che uso anche io.

    (@bburgay)

    @constantcontact @geektome

    Ho appena provato questo con Postman e ho anche esaminato il codice. Viene inserito il blocco se aggiunto e ottengo la risposta corretta con “g-recaptcha-response” omesso. Ricevo solo il messaggio “Abbiamo avuto problemi durante l’elaborazione della tua richiesta. »Errore quando commento il nuovo blocco if e utilizzo un valore per” ctct_form “che non è più valido (nonce nonce).

    @geektome Ho ricevuto la tua correzione temporanea da alcuni giorni (ho anche eseguito il debug per assicurarmi che funzionasse) ma continuiamo a ricevere spam. Quindi sto iniziando a pensare che non sia l’unico problema con il plugin.

    Ecco uno screenshot che mostra come provo con Postman https://pasteboard.co/HUMVYm6.jpg

    Autore del plugin

    (@contatto costante)

    Sì, conosciamo anche Postman.

    Useremo queste informazioni fornite oggi per fare ulteriori test e continuare a battere i proverbiali pneumatici con esso. Vogliamo assolutamente che questo percorso sia isolato e rattoppato.

    Autore del plugin

    (@contatto costante)

    Abbiamo imitato tutti i campi e i campi nascosti nel nostro modulo di prova, come parte di una richiesta POST x-www-form-urlencoded nel nostro fattore, come mostrato nello screenshot e come demo qui sotto, con la modifica del codice che abbiamo evidenziato sopra a posto.

    email___ecd412e904309dcce66177488240b016=EMAILADDRESSHERE&ctct-id=54&ctct-verify=hCeih5h4WQS08V0beN4a6p6vg&ctct_time=1546562428&ctct-submitted=Sign%20up&ctct_form=21af49bfef
    

    e

    email___ecd412e904309dcce66177488240b016=EMAILADDRESSHERE&ctct-id=54&ctct-verify=hCeih5h4WQS08V0beN4a6p6vg&ctct_time=1546562428&ctct-submitted=Sign%20up&ctct_form=21af49bfef&g-recaptcha-response=true
    

    Entrambe le volte sono usciti presto come ci si potrebbe aspettare. Quest’ultimo era principalmente per ulteriori test e non sarebbe riuscito perché non è un valore di risposta di Google effettivo e non viene convalidato.

    A meno che non mi stia perdendo qualcosa di più ovvio per gli altri, cosa che ammetto volentieri se sottolineo, non sono sicuro di cosa stia facendo male questa versione di noi. Facci sapere di più o quali azioni non stiamo intraprendendo che mostrano una soluzione alternativa di successo per te.

    (@bburgay)

    Ciao @constantcontact,

    Anche per me è uscito in anticipo come previsto. Ho rimosso la correzione temporanea e implementato la modifica del plug-in su un sito live. Ti dirò tra qualche giorno se lo spamming è cessato.

    Grazie,
    Brian

    Autore del plugin

    (@contatto costante)

    Sembra buono. Si prega di essere pronti ad aiutare a testare e confermare.

    (@bburgay)

    Nessun problema. Sono passati 3 giorni e non abbiamo ricevuto alcun invio di spam, quindi direi che questa correzione è pronta. ??

    Autore del plugin

    (@contatto costante)

    È bello avere una conferma da @bburgay.

    È probabile che rilasceremo questa correzione e, come sempre, continueremo a cercare di rimanere il più sicuri possibile contro lo spam. Possiamo sempre aggiungerne altri in futuro e i nostri miglioramenti interni basati sullo spam non si disattivano mai completamente.

    Autore del plugin

    (@contatto costante)

    Spinto come parte della versione 1.4.4. Se c’è ancora altro da fare, faccelo sapere e continueremo a dare un calcio alle gomme 😀

Hai risolto il tuo problema?

0 / 0

Lascia un commento 0

Il tuo indirizzo email non sarà pubblicato. Required fields are marked *