[risolto] Continuo SPAM sul modulo contatti

felino

Utente Attivo
12 Dic 2013
941
10
18
Aci Catena (Catania)
Salve a tutti,
uso sempre la stessa sintassi e codice per la realizzazione del modulo contatti, l'ho applicata in diversi siti web, ma in uno di questi lo spam arriva sempre!

Ho cambiato struttura del codice per le varie verifiche
Ho cambiato il codice di sicurezza, attualmente ho inserito il codice reCaptcha

I messaggi di SPAM non fanno altro che arrivare ugualmente.

Vi posto il codice:
PHP:
            //CHIAVE privata e pubblica sono state dichiarate in un altro file                                 
            if(isset($_GET["upload"]) and $_GET["upload"]==1){

           //load recaptcha file
           require_once('libraries/captcha/recaptchalib.php');
           //check recaptcha fields
           $resp = recaptcha_check_answer ($privatekey,
                                                          $_SERVER["REMOTE_ADDR"],
                                                          $_POST["recaptcha_challenge_field"],
                                                          $_POST["recaptcha_response_field"]);

           if($resp->is_valid){

                   if($_POST['nome']==NULL){ echo '<div class="warning">Campo nome vuoto</div>';}
                   
                   elseif($_POST['mail']==NULL){ echo '<div class="warning">Campo email vuoto</div>';}

                   elseif($_POST['messaggio']==NULL){ echo '<div class="warning">Messaggio testo vuoto</div>';}

            else {

            $messaggio="Hai ricevuto un nuovo messaggio:
            Nome: ".$_POST['nome']."
            Telefono: ".$_POST['telefono']."
            Email: ".$_POST['mail']."
            Messaggio: ".stripslashes($_POST['messaggio']);

            $a = mail($email_sito_web, "Messaggio da $nome_sito_web", $messaggio, "From: ".$_POST['nome']." <".$_POST['mail'].">") or print ("<script> alert('Errore invio dell'e-mail!')</script>"); 

            echo '<div class="success">Messaggio inviato correttamente</div>';            }                            
            } else { 
            
            echo '<div class="errore">Errore nell\'invio o messaggio di sicurezza errato</div>';

            }
} ?>

<script type="text/javascript"> var RecaptchaOptions = { theme : 'clean' }; </script>

<form id="two" name="modulo" method="POST" action="index.php?lang=it&amp;page=7&amp;upload=1" onSubmit="return formCheck(this)">

<fieldset id="personal">
    <legend>Modulo contatti</legend>
    <label>Nome</label>
    <input name="nome" type="text" size="35" value="<?php echo (isset($_POST['nome']) ? $_POST['nome'] : ''); ?>"/>

    <br />

    <label for="firstname">Telefono</label>
    <input name="telefono" type="text" size="35" value="<?php echo (isset($_POST['telefono']) ? $_POST['telefono'] : ''); ?>"/>

    <br />

    <label for="mail">Email</label>
    <input type="text" name="mail" size="35" value="<?php echo (isset($_POST['mail']) ? $_POST['mail'] : ''); ?>">

    <br />

    <label for="message">Messaggio</label>
    <textarea name="messaggio" cols="45" rows="8"><?php echo (isset($_POST['messaggio']) ? $_POST['messaggio'] : ''); ?></textarea>

     <br /><br />

      <center>
      
      <?php
      // load recaptcha file
      require_once('libraries/captcha/recaptchalib.php');
      // display recaptcha test fields
      echo recaptcha_get_html($publickey);
      ?>

     </center>
   
     <br /><br />

      <center><input id="button2" type="submit" value="Invia" title="Invia"></center>

</fieldset>

</form>
 
Ciò che non mi da pace è il perchè questo modulo non deve funzionare e risulta così vulnerabile.

Ci sono milioni di guide in merito che spiegano come usare il reCaptcha, funziona a tutti e a me no? :|
 
Domanda stupida: hai provato a verificare se sbagliando di proposito l'inserimento del captcha il modulo effettivamente non invia niente ?

Altrimenti, una soluzione molto spartana ma anche molto efficiente per un caso generico (ovvero: non hai qualcuno che struttura lo spam in base a come componi il sito, ma usa un robot che riempie tutti i campi del form di turno) è quella di creare un campo input di tipo hidden da lasciare volutamente vuoto.

Se ti arriva pieno dall'altro lato significa che non è un utente quello che l'ha riempito e di conseguenza annulli il processo di invio.
 
Si si, l'invio non avviene se il codice di sicurezza è errato.

Si, in un sito avevo adattato la soluzione da te indicata e diciamo che funzionava....

MA vorrei capire come mai questa non va?! :)
 
Molto semplicemente allora riescono ad interpretare il captcha.
Non ci sono solo software OCR, ma ci sono anche altri metodi con cui i captcha possono essere decodificati e purtroppo neanche reCaptcha è immune da questo processo.

E' probabilissimo che se ti passa tanto spam in realtà recaptcha stia funzionando e buona parte delle richieste vengono effettivamente bloccate.

Per provare questa ipotesi, se hai possibilità, crea una tabella sul database e usala per segnarti i tentativi di invio del form che falliscono perché sbagliano il captcha, in questo modo si può capire meglio cosa stia effettivamente succedendo.
 
Alla fine ho optato per dei controlli custom, esempio che un campo deve essere solo numerico o in un determinato formato e al momento non è arrivato più spam.

Vedrò di testare il reCaptcha presso un altro sito e vedere se mi da lo stesso problema.

Grazie a tutti.
 
Al massimo potresti optare per l'utilizzo di captcha più complicati.
I software già citati riescono a decifrare quelli semplici ma alcuni captcha riescono a dare ancora una certa tranquillità (anche se non troppa).
 

Discussioni simili