При написании скриптов автоответчика в php, как вы можете изменить раздел из электронной почты? - PullRequest
0 голосов
/ 27 ноября 2018

Во-первых, я не слишком разбираюсь в PHP.Я попытаюсь объяснить с пониманием того, что PHP на моем сайте был написан моим другом в колледже, поэтому я понимаю только небольшие его фрагменты.Во всяком случае, все работает отлично, мне просто интересно сейчас, когда автоответ получен, это от nf.theamitybladecom@boscustweb2204.eigbox.net, что меня беспокоит.theamitybladecom - это, конечно, ссылка на название моего сайта.Я надеялся, что смогу настроить его, чтобы сказать по адресу noreply@theamityblade.com или что-то в этом роде.В любом случае, это код, который у меня есть, и простите, что удалил несколько конфиденциальных записей.Надеюсь, вы понимаете, что я стремлюсь сделать, и что это простое изменение в моем коде.Я вообще не могу справиться со сложным PHP, поэтому, пожалуйста, объясните это новичкам.Любая помощь, которую вы можете предложить, будет принята с благодарностью.Спасибо,
Black_Lightning

    <?php
        /* Verify captcha from google */
        function verify_captcha($response) {
            $url = 'https://www.google.com/recaptcha/api/siteverify';
            $curl = curl_init();
            $captcha_verify_url = "https://www.google.com/recaptcha/api/siteverify";
            curl_setopt($curl, CURLOPT_URL,$captcha_verify_url);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, "secret=captchaSecretKey&response=".$response);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            $verify = curl_exec ($curl);
            curl_close ($curl);

            $captcha_success=json_decode($verify);
            if ($captcha_success->success==true) {
                return true;
            } else{
                return false;
            }
        }

    $action=$_REQUEST['action'];
    $show_form = true;
    if ($action!="")    /* display the contact form */
        {
            $name=$_POST['name'];
            $email=$_POST['email'];
            $message=$_POST['message'];
            $response = $_POST["g-recaptcha-response"];

            //check if the captcha is valid or not
            if (verify_captcha($response)) {
                $subject="New Message for me!";
                mail("example@mysite.com",$subject,$message,"From: $email \n");
                echo "Email sent!!";
                $show_form = false;
            } else if ($captcha_success->success==false) {
                $show_form = true;
            }
        }
    ?>
    <?php if($show_form) { ?>
        <form  id="form" class="contact-form" action="" onSubmit="return checkValid()"method="POST" enctype="multipart/form-data">
          <input type="hidden" name="action" value="submit" />
          <span id="blue-text">Your name:<br>
        <input id="name" name="name" type="text" value="" size="50"/>
        <br>
        Your email:<br>
        <input id="email" name="email" type="text" value="" size="50"/><br>
        Your message:<br>
        </span>
          <textarea id="message" name="message" wrap="hard" rows="10" cols="49" ></textarea>
          <br>
        <div class="g-recaptcha" data-sitekey="captchaSiteKey"></div>
        <input type="submit" value="Send"/>
        </form>
        <?php
        } 
        /* Prepare autoresponder subject */
    $respond_subject = "Thank you for contacting me!";

    /* Prepare autoresponder message */
    $respond_message = "Hello!

    Thank you for contacting me! I will get back to you
    as soon as possible!

    Yours sincerely,

   My Name
    www.mysite.com
    ";

    /* Send the message using mail() function */
    mail($email, $respond_subject, $respond_message);
    ?>
    <script>
        function checkValid()
        {
            var name = document.getElementById("name");
            var email = document.getElementById("email");
            var message = document.getElementById("message");
            var firstError = null;

            var errorMessage = "";
            if (name.value == "")
            {
                errorMessage += "Please enter your name! \n";
                if (firstError == null)
                {
                    firstError = name;
                }
            }
            if (email.value == "")
            {
                errorMessage += "Please enter your email! \n";
                if (firstError == null)
                {
                    firstError = email;
                }
            }
            if (message.value == "")
            {
                errorMessage += "Please enter your message! \n";
                if (firstError == null)
                {
                    firstError = message;
                }
            }

            if (errorMessage != "")
            {
                alert(errorMessage);
                firstError.focus();
                return false;
            }
            else
            {
                return true;
            }
        }
    </script>

1 Ответ

0 голосов
/ 28 ноября 2018

В настоящее время он пытается использовать адрес электронной почты отправителя в качестве адреса отправителя:

mail("example@mysite.com",$subject,$message,"From: $email \n");

Не делайте этого;это подделка и будет либо полностью заблокирована, либо приведет к тому, что ваши сообщения будут отфильтрованы или отклонены.Вместо этого установите его в качестве заголовка для ответа:

mail("example@mysite.com", $subject, $message, "Reply-to: $email \n");

Этот код уязвим к атакам с внедрением заголовка, поскольку фильтрация к $_POST['email'] не применяется, прежде чем он будет использоваться в качестве заголовка сообщения.В целом, избегайте использования функции почты вообще;это по своей сути небезопасно.Используйте такую ​​библиотеку, как PHPMailer (с которой вы пометили этот вопрос) и отправьте с использованием SMTP на localhost, что быстрее и безопаснее.См. пример контактной формы PHPMailer .

...