[PHP] Creare Honeypot per form contatti

Tom&Jerry

Nuovo Utente
26 Giu 2019
5
0
1
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 ="[email protected]";   //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>");
   
    }
    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'email, si prega di tornare alla pagina precedente e riprovare.</center></font>");
   
    }

?>
</body>
</html>
 
Ultima modifica:

mr.x

Utente Attivo
9 Apr 2016
252
25
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.
 

Tom&Jerry

Nuovo Utente
26 Giu 2019
5
0
1
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:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
@Tom&Jerry
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008


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
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
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

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).
 

Tom&Jerry

Nuovo Utente
26 Giu 2019
5
0
1
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 ="[email protected]";   //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>
 

mr.x

Utente Attivo
9 Apr 2016
252
25
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 ="[email protected]";   //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"; }

?>
 

Tom&Jerry

Nuovo Utente
26 Giu 2019
5
0
1
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
 

mr.x

Utente Attivo
9 Apr 2016
252
25
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:

Tom&Jerry

Nuovo Utente
26 Giu 2019
5
0
1
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 ?
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
si è normale, header() non blocca lo scroll della pagina, exit serve appunto a terminare lo script.
 
Discussioni simili
Autore Titolo Forum Risposte Data
U PHP creare un file excel dopo ricerca nel DB PHP 0
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
J creare pagina php di prenotazione PHP 5
F [PHP] creare tabella e tasto cerca PHP 3
B [PHP] Creare PDF dopo inserimento dati form PHP 4
R [PHP] Creare sistema random PHP 3
D [PHP] Consigli su come creare form PHP 1
S [PHP] Creare collegamento filtri di ricerca al database PHP 6
Z Creare VirtualHost Apache2 con PHP? Programmazione 0
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
E [PHP] creare temporary table per dati da xml PHP 2
R [PHP] creare pagina profilo per ogni utente PHP 4
M [PHP] Creare un menu a tendina con pdo PHP 18
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
C [PHP] Creare un Pulsante che ricopia valori di un campo in altro record PHP 4
Shyson [WordPress] [PHP] Creare codice che evidenzia nuovi articoli WordPress 0
ANDREA20 creare sito in php PHP 6
G [PHP] Creare appuntamento ed inviarlo tramite mail (Outlook e Gmail) PHP 0
F [PHP] Creare un'area web riservata PHP 13
S [PHP] [HTML] Come creare un grafico dinamico PHP 4
V Creare tabella mysql con php non funziona PHP 1
M Creare tabella da pagina php popolata con valori passati con POST PHP 5
B [PHP] hp script creare un utente diminuendo -1 e cosi via PHP 1
AntoCastro [PHP] Creare un sito di quiz a catena PHP 17
V Creare funzioni PHP per agevolare bootstrap PHP 1
B funzioni per creare file e inserirli dentro una certa cartella in php? PHP 1
F Creare pagina PHP come quella di phpMyadmin PHP 12
M Creare tabella da pulsante php PHP 6
M Creare un exe da un listato php PHP 5
P [PHP] Creare un elenco completo con tabella PHP 3
Zea [PHP] RISOLTO - creare link con il risultato dell'interrogazione db PHP 1
utente è possibile creare una pagina php che copia interamente il contenuto di un'altra pagina ? PHP 10
A [PHP] Creare numero ticket casuale PHP 5
giannit [PHP] Creare pagina con collegamenti ipertestuali da file txt PHP 6
B [PHP] Creare un'interfaccia di inserimento testo in varie posizioni PHP 1
sandropochi [PHP] Form per creare filtro di ricerca su DB PHP 8
L [PHP] Creare un uploader di file csv xls e ricercare i risultati PHP 0
Zayciho [PHP] Creare sito web dinamico PHP 5
P [PHP] Creare elenco immagini PHP 2
L [php e xml] per creare una galleria fotografica con diversi file xml PHP 0
M [PHP] Creare chart con highchart PHP 6
T [PHP]Creare cookie PHP 5
Monital [PHP] Creare un array da stringa con diversi spazi PHP 3
P [PHP] come creare una chat PHP 24
trattorino Creare codice php help PHP 26
R [PHP] [HTML] Creare script invio modulo contatti PHP 2
romeocharly Creare un script/codice in php per collegare un id mysql con un file PHP 0
S PHP: creare un link in una pagina PHP 7
D Cerco Collaboratore in gradio di creare siti in wordpress, joomla, e PHP Offerte e Richieste di Lavoro e/o Collaborazione 7

Discussioni simili