[PHP] Creare Honeypot per form contatti

Discussione in 'PHP' iniziata da Tom&Jerry, 26 Giugno 2019.

Tag (etichette):
  1. Tom&Jerry

    Tom&Jerry Nuovo Utente

    Registrato:
    26 Giugno 2019
    Messaggi:
    5
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Buongiorno, non ho grande dimestichezza con il PHP e sto cercando di creare un Honeypot per limitare lo spam che sto ricevendo. Vi includo il form PHP nel quale si trova il problema, il pezzo di codice CSS e quello HTML con il form. Ciò che devo fare è nascondere il campo TELEFONO (come da CSS) e far in modo che se viene compilato in automatico da un bot il form dia errore.
    Vi ringrazio fin da ora per l'assistenza e rimango a disposizione per chiarire eventuali aspetti. Marco

    HTML:
    
    <style>
        .ohnohoney{
            opacity: 0;
            position: absolute;
            top: 0;
            left: 0;
            height: 0;
            width: 0;
            z-index: -1;
        }
    </style>
    
    
    HTML:
    
     <p class="data"><strong>Nome e Cognome</strong><br />
          <input type="text" size="21" name="requirednome" background-color="FFF">
        <br />
          <strong><br />Indirizzo e-mail</strong><br />
          <input type="text" size="21" name="requiredemail" background-color="FFF">
        <br />
          <strong><br />Messaggio</strong><br />
          <textarea name="requiredmessaggio" background-color="FFF" rows="9" cols="17" wrap="virtual"></textarea>
        <br />
          <input type="text" name="telefono" class="ohnohoney" placeholder="Telefono">
        </p>

    PHP:

    <html>
    <head>
    <title>Conferma invio messaggio</title>

    </head>
    <body><?php
    //*******************************************************************************************
    //***********************************RIGHE DA MODIFICARE*************************************
    $oggetto "Email dal web";                //L'oggetto con cui vuoi che ti arrivi la mail
    $indirizzo_dest ="test@sitomio.com";   //L'indirizzo di posta a cui arriveranno i messaggi inviati dal form
    //***********************NON MODIFICARE NIENTE AL DI SOTTO DI QUESTA RIGA*********************

    $header .="From: <".$_GET['requiredemail'].">";  //qsta riga serve per fare in modo che $email sia visto cm mittente 
    $messaggio $_GET['requiredmessaggio']. 
    $telefono = $_GET['telefono']. " 

    Nome".$_GET['requirednome']." 
    Nome".$_GET['telefono']." 
    Email".$_GET['requiredemail'];  //seconda parte dell'header


    if (!empty(
    $_SERVER['HTTP_CLIENT_IP'])) {
        
    $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR'])) {
        
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        
    $ip = $_SERVER['REMOTE_ADDR'];
    }

    $messaggio .=
    "
    IP". $ip . "
    Browser". $_SERVER['HTTP_USER_AGENT'] ;

        if(mail(
    $indirizzo_dest$oggetto$messaggio$header))
        {
            include 'conferma.html';
        }
        else
        {
            print("
    <center><br><br><br><font size='5' color='#FF0000'>Si è verificato un errore durante l'invio dell'emailsi prega di tornare alla pagina precedente e riprovare.</center></font>");
       
        }
        if(mail(
    $indirizzo_dest$oggetto$messaggio$header$telefono))
        {
            print("
    <center><br><br><br><font size='5' color='#FF0000'>Si è verificato un errore durante l'invio dell'emailsi prega di tornare alla pagina precedente e riprovare.</center></font>");
       
        }

    ?>
    </body>
    </html>
     
    Ultima modifica: 27 Giugno 2019
  2. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    Ciao Marco,
    hai pensato di inserire n CAPTCHA?

    riguardo nascondere il campo telefono puoi farlo da css (inserendo nella classe .ohnohoney dispaly:none;) .. però se nn ti serve tale voce potresti anche toglierla.
     
  3. Tom&Jerry

    Tom&Jerry Nuovo Utente

    Registrato:
    26 Giugno 2019
    Messaggi:
    5
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Non mi interessa il CAPTCHA, crea solo problemi a chi spedisce. Il parametro display:none non va bene perchè ormai i bot lo riconoscono e bypassano, in ogni caso il problema non è lì perchè il campo telefono è già nascosto con i settaggi che ho riportato. Il problema è nel file PHP nella doppia condizione e non riesco a capire come risolverlo.
    Devo fare in modo che se vengono compilati i campi $indirizzo_dest, $oggetto, $messaggio e $header allora viene richiamata la pagina conferma.html, mentre se oltre a quelli viene compilato anche il campo $telefono il modulo deve dare errore
     
    Ultima modifica: 26 Giugno 2019
  4. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.806
    Mi Piace Ricevuti:
    283
    Punteggio:
    83
    Sesso:
    Maschio
    @Tom&Jerry
    Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [​IMG] o il tag [​IMG] per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
    [​IMG]

    Inoltre ti prego e sei tenuto di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
    Grazie
    Per questa volta te lo sistemo io ma mi raccomando per il futuro
     
  5. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    Scusa ma forse ti sei perso qualche pezzo di codice mentre lo copiavi, quale sarebbe la doppia condizione? Di controlli non ne vedo sui valori postati tramite form..

    dovresti inserire qualcosa del genere:
    PHP:
    // controllo che siano passati messaggio, nome ed email non vuoti e che risulti non compilato il campo telefono
    if (( $_GET['requiredmessaggio'] !="" ) && ($_GET['requirednome'] !="" ) && ( $_GET['requiredemail'] !="") && ($_GET['telefono'] =="")) {

    // qui il codice per l'invio della mail

    } else { echo "errore"; }
    Comunque il codice che utilizzi va bene per un esercizio, se devi usarlo in produzione non è il massimo.. (a cominciare dal passaggio dei dati in GET alla mancanza totale di controlli su ciò che viene passato).
     
  6. Tom&Jerry

    Tom&Jerry Nuovo Utente

    Registrato:
    26 Giugno 2019
    Messaggi:
    5
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Non funziona ancora, il problema è nel file PHP. Riscrivo tutto il codice, magari esce l'errore che non riesco a trovare in quanto mi dà ERRORE 500 e potrebbe trattarsi di un problema di sintassi da qualche parte.

    PHP:

    <html>
    <head>
    <title>Conferma invio messaggio</title>

    </head>
    <body><?php
    //*******************************************************************************************
    //***********************************RIGHE DA MODIFICARE*************************************
    $oggetto "Email dal web";                //L'oggetto con cui vuoi che tiarrivi la mail
    $indirizzo_dest ="test@sitomio.com";   //L'indirizzo di posta a cui arriveranno i messaggi inviati dal form   
    //***********************NON MODIFICARE NIENTE AL DI SOTTO DI QUESTA RIGA*********************

    $header .="From: <".$_GET['requiredemail'].">";  //qsta riga serve per fare in modo che $email sia visto cm mittente
    $messaggio $_GET['requiredmessaggio']. "
    $telefono = $_GET['telefono']. "

    Nome".$_GET['requirednome']."
    Nome".$_GET['telefono']."
    Email".$_GET['requiredemail'];  //seconda parte dell'header


    if (!empty(
    $_SERVER['HTTP_CLIENT_IP'])) {
        
    $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR'])) {
        
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        
    $ip = $_SERVER['REMOTE_ADDR'];
    }

    $messaggio .=
    "
    IP". $ip . "
    Browser". $_SERVER['HTTP_USER_AGENT'] ;

        // controllo che siano passati messaggio, nome ed email non vuoti e che risulti non compilato il campo telefono
            if (( 
    $_GET['requiredmessaggio'] !="" ) && ($_GET['requirednome'] !="" ) && ( $_GET['requiredemail'] !="") && ($_GET['telefono'] =="")) {

            include 'conferma.html';
        } else { echo "
    errore"; }

    ?>
    </body>
    </html>

     
  7. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    PHP:
    <?php

    // controllo che siano passati messaggio, nome ed email non vuoti e che risulti non compilato il campo telefono
    if (( $_GET['requiredmessaggio'] !="" ) && ($_GET['requirednome'] !="" ) && ( $_GET['requiredemail'] !="") && ($_GET['telefono'] =="")) {

    // qui il codice per l'invio della mail

    //*******************************************************************************************
    //***********************************RIGHE DA MODIFICARE*************************************
    $oggetto "Email dal web";                //L'oggetto con cui vuoi che tiarrivi la mail
    $indirizzo_dest ="test@sitomio.com";   //L'indirizzo di posta a cui arriveranno i messaggi inviati dal form  
    //***********************NON MODIFICARE NIENTE AL DI SOTTO DI QUESTA RIGA*********************

    $header .="From: <".$_GET['requiredemail'].">";  //qsta riga serve per fare in modo che $email sia visto cm mittente
    $messaggio $_GET['requiredmessaggio'].
    $telefono $_GET['telefono']. "

    Nome: "
    .$_GET['requirednome']."
    Nome: "
    .$_GET['telefono']."
    Email: "
    .$_GET['requiredemail'];  //seconda parte dell'header


    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        
    $ip $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR'])) {
        
    $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        
    $ip $_SERVER['REMOTE_ADDR'];
    }

    $messaggio .=
    "
    IP: "
    $ip "
    Browser: "
    $_SERVER['HTTP_USER_AGENT'] ;

        if(
    mail($indirizzo_dest$oggetto$messaggio$header))
        {
            include 
    'conferma.html';
        }
        else
        {
            print(
    "<center><br><br><br><font size='5' color='#FF0000'>Si è verificato un errore durante l'invio dell'email, si prega di tornare alla pagina precedente e riprovare.</center></font>");
     
        }



    } else { echo 
    "errore"; }

    ?>
     
  8. Tom&Jerry

    Tom&Jerry Nuovo Utente

    Registrato:
    26 Giugno 2019
    Messaggi:
    5
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ti ringrazio per la risposta. Purtroppo non sono un grande conoscitore di PHP quindi di chiedo un'ultima cortesia: cosa devo scrivere al posto di // qui il codice per l'invio della mail ? Ho necessità di richiamare la pagina "conferma.html", come specificato nella condizione IF sottostante. Grazie
     
  9. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    Quella riga puoi anche toglierla, me la son portata dietro dal post precedente. Ho inserito io il codice all'interno vedendo che avevi trovato difficoltà.


    P.s.
    Al posto dell'include potreti utilizzare un redirect.

    Sostituisci quella riga con

    PHP:
    header("location: confrma.html");
    exit;
     
    Ultima modifica: 27 Giugno 2019
  10. Tom&Jerry

    Tom&Jerry Nuovo Utente

    Registrato:
    26 Giugno 2019
    Messaggi:
    5
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Grazie infinite, ora funziona tutto correttamente. Ho solo un'ultima cosa da chiederti, giusto per mia informazione personale:
    ho sostituito la riga
    PHP:
    include 'conferma.html';
    con
    PHP:
    header("location: conferma.html");
    exit;
    lasciando poi invariato il resto fino alla fine del file e funziona, ho notato però che funziona anche senza la stringa "exit;", è normale ?
     
  11. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    si è normale, header() non blocca lo scroll della pagina, exit serve appunto a terminare lo script.
     
Sto caricando...

Condividi questa Pagina