Как добавить рекапчу в mailform - PullRequest
0 голосов
/ 10 апреля 2019

Веб-сайт жены умершего друга был использован не по назначению для рассылки спама.Это, вероятно, потому что ReCaptcha не используется с формой регистрации.Сайт использует Joomla 3.9.

Я хотел бы добавить ReCaptcha, но я не знаю, как я могу это сделать.

Я надеюсь, что кто-то может помочь.

У меня нетЯ попробовал что-нибудь сам, потому что мои знания PHP не достаточно хороши, чтобы сделать это.

Вот форма:

<form id="form1" action="/script/mailforms/mailsend.php" enctype="multipart/form-data" method="post"><input name="redirect" type="hidden" value="/bedankt" />
 <table border="0" width="200">
 <tbody>
 <tr>
 <td> </td>
 <td><strong>Gegevens ouder/verzorger</strong></td>
 <td> </td>
 <td> </td>
 <td><strong>Gegevens kind</strong></td>
 </tr>
 <tr>
 <td>Voornaam</td>
 <td><span id="sprytextfield1"> <label for="Naam"></label> <input id="Naam" name="Naam" type="text" /> </span></td>
 <td> </td>
 <td>Naam kind</td>
 <td><span id="sprytextfield9"> <label for="Naam Kind"></label> <input id="Naam Kind" name="Naam Kind" type="text" /> </span></td>
 </tr>
 <tr>
 <td>Achternaam</td>
 <td><span id="sprytextfield2"> <label for="Achternaam"></label> <input id="Achternaam" name="Achternaam" type="text" /> </span></td>
 <td> </td>
 <td>Geslacht</td>
 <td><span id="spryradio1"> <label> <input id="Geslacht_0" name="Geslacht" type="radio" value="Jongen" /> jongen</label> <br /> <label> <input id="Geslacht_1" name="Geslacht" type="radio" value="Meisje" /> meisje</label> <br /> </span></td>
 </tr>
 <tr>
 <td>Straat + nr</td>
 <td><span id="sprytextfield3"> <label for="Straat en nr"></label> <input id="Straat en nr" name="Straat en nr" type="text" /> </span></td>
 <td> </td>
 <td>Geboortedatum</td>
 <td><span id="sprytextfield10"> <label for="Geboortedatum"></label> <input id="Geboortedatum" name="Geboortedatum" type="text" /> </span></td>
 </tr>
 <tr>
 <td>Postcode</td>
 <td><span id="sprytextfield4"> <label for="Postcode"></label> <input id="Postcode" name="Postcode" type="text" /> </span></td>
 <td> </td>
 <td>Schoolnaam</td>
 <td><span id="sprytextfield11"> <label for="Schoolnaam"></label> <input id="Schoolnaam" name="Schoolnaam" type="text" /> </span></td>
 </tr>
 <tr>
 <td>Woonplaats</td>
 <td><span id="sprytextfield5"> <label for="Woonplaats"></label> <input id="Woonplaats" name="Woonplaats" type="text" /> </span></td>
 <td> </td>
 <td>Voorkeur</td>
 <td><span id="spryradio2">  <br /> <label> <input id="Voorkeur_1" name="Voorkeur" type="radio" value="Woensdag" /> Woensdagmiddag (Zonnestudio)</label> <br /> </span></td>
 </tr>
 <tr>
 <td>Telefoonnr</td>
 <td><span id="sprytextfield6"> <label for="Telefoonnr"></label> <input id="Telefoonnr" name="Telefoonnr" type="text" /> </span></td>
 <td> </td>
 <td> </td>
 <td> </td>
 </tr>
 <tr>
 <td>Email</td>
 <td><span id="sprytextfield7"> <label for="Email"></label> <input id="Email" name="Email" type="text" /> </span></td>
 <td> </td>
 <td>Bijzonderheden</td>
 <td><span id="sprytextarea1"> <label for="Bijzonderheden"></label>      <textarea id="Bijzonderheden" cols="45" name="Bijzonderheden" rows="5">     </textarea> </span></td>
 </tr>
 <tr>
 <td>Bank/gironr</td>
 <td><span id="sprytextfield8"> <label for="Bankgiro"></label> <input id="Bankgiro" name="Bankgiro" type="text" /> </span></td>
 <td> </td>
 <td> </td>
 <td> </td>
 </tr>
 <tr>
 <td> </td>
 <td colspan="4"><br /><span id="sprycheckbox1"> <input id="Algemene Voorwaarden" name="Algemene Voorwaarden" type="checkbox" /> </span>Ik heb de de <strong><a href="over-de-zwemschool/algemene-voorwaarden-de-zwemschool" target="_blank" rel="noopener noreferrer">algemene voorwaarden</a></strong> gelezen en ga hiermee akkoord</td>
 </tr>
 <tr>
 <td> </td>
 <td><input id="Verzenden" name="Verzenden" type="submit" value="Verzenden" /></td>
 <td> </td>
 <td> </td>
 <td> </td>
 </tr>
 </tbody>
 </table>
</form>

Вот mailsend.php:

<?php   
require('class.mailer.info.php');

//phpinfo();

/* Vaste post waarden vastleggen */
// ontvanger
if(empty($_POST['redirect']))
{   
    die("error: geen ontvanger vastgelegd en redirect pad.");
}


// Instantiate your new class
$mail = new HeartmedicalMailer;

/*
Verwerken post informatie
*/
$body_text = '';

// waardes die je niet wilt tonen wegfilteren als redirect / receipient etc.
$excluded = array('redirect');

// html opmaak formulier voor loop
$body_text .= "<style>body{ font-family:Verdana, Arial; font-size:11px; color:#000000; }</style>";

// loop doorlopen met opmaak
foreach($_POST as $key => $value)
{
    // vaste waardes wegfilteren
    if(!in_array($key, $excluded))
    {
        if(!empty($value))
        {   
            $key = preg_replace('#_#',' ', $key);

            $body_text .= '<strong>'.$key.'</strong>:  '.$value.'<br>';
        }
    }
}   

// Now you only need to add the necessary stuff
$mail->Body = $body_text;

if(!$mail->Send())
{
    echo "Mailer Error: " . $mail->ErrorInfo;
    die("There was an error sending the message #code1");
} 

// redirect
header("Location: ".$_POST['redirect']." ");        
?>

Вот class.mailer.info.php:

<?php
// class phpmailer
require("../phpmailer/class.phpmailer.php");

class HeartmedicalMailer extends PHPMailer 
{
    // Set default variables for all new objects
    var $From     = "xxxxx@xxxxx.nl";
    var $FromName = "De Zwemschool";
    var $Host     = "localhost";
    /* smtp auth */
    var $Mailer   = "smtp"; // Alternative to IsSMTP()
    var $SMTPAuth = false;     // turn on SMTP authentication
    var $Username = "";  // SMTP username
    var $Password = ""; // SMTP password

    var $WordWrap = 75;
    var $Subject  = "Inschrijving De Zwemschool";

    function HeartmedicalMailer() 
    {

                    $this->AddAddress('xxxx@xxxx.nl', 'Name');


        $this->IsHTML(true);
    }

    // Replace the default error_handler
    function error_handler($msg) {
        print("Mailer Error");
        print("Description:");
        printf("%s", $msg);
        exit;
    }
}
?>

Я бы хотел, чтобы форма отправлялась с recaptcha

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете использовать Google reCAPTCHA.

Я лично использую reCAPTACHA V2 невидимую, поэтому вы найдете пример ниже.

Сначала получите ключи здесь: ссылка

Затем замените введенные данные этим:

<button class="g-recaptcha form-control" data-sitekey="YOUR_RECAPTCHA_KEY" data-callback='onSubmit'>Send</button>

Затем добавьте эти скрипты на свою HTML-страницу:

<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
  function onSubmit(token) {
    document.getElementById("form1").submit();
  }
</script>

И, наконец, добавьте это в начале вашего mailsend.php:


    function get_ip() {
        // IP if shared network
        if (isset($_SERVER['HTTP_CLIENT_IP'])) {
            return $_SERVER['HTTP_CLIENT_IP'];
        }
        // IP behind proxy
        elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        // Sinon : normal IP
        else {
            return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
        }
    }

    // Anti spam using google Captcha
    $post_params = [
        'secret'    => "YOUR",
        'response'  =>  $_POST['g-recaptcha-response'],
        'remoteip'  => get_ip()
    ];
    # Create a connection
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $ch = curl_init($url);
    # Form data string
    $post_string = http_build_query($post_params, '', '&');
    # Setting our options
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    # Get the response
    $response = curl_exec($ch);
    $response = json_decode($response);
    curl_close($ch);

    if(!$response->success){
        exit();
    } 

Надеюсь, это поможет;)

...