2017-08-07 9 views
-2

私はクライアントのウェブサイト上の電子メールフォームを扱ういくつかのコードを手渡してきました。ここにコードがあります。PHPでSMTPヘッダ操作にどのように対処できますか?

<?php 

    $not_found = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]/404"; 

     if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) { 
       if($_POST && isset($_POST['emailForm'])) { 

         require_once 'lib/swift_required.php'; 

         $site_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]"; 
         $from_email = $_POST['FromEmail']; 
         $first_name = $_POST['FirstName']; 
         $to_email = $_POST['ToEmail']; 
         $transport = Swift_SmtpTransport::newInstance('localhost', 25); 
         $mailer = Swift_Mailer::newInstance($transport); 

         if($_POST['emailForm'] == 'share') { 

           $subject = $first_name . ' wants to share some info about acne treatment'; 

           $email_body = file_get_contents('templates/share.html'); 
           $email_body = str_replace(
                     array('[BASEURL]', '[SENDER NAME]'), 
                     array($site_url, $first_name), 
                     $email_body 
                   ); 

           $message = Swift_Message::newInstance($subject) 
             ->setFrom($from_email) 
             ->setTo($to_email) 
            ->setBody($email_body); 
           $message->addPart($email_body, 'text/html'); 

         } 

         if($_POST['emailForm'] == 'ddg') { 
           $file_name = 'pdf/Dermatologist_Discussion_Guide.pdf'; 
           $subject = 'Your Dermatologist Discussion Guide'; 
           $email_body = file_get_contents('templates/ddg.html'); 
           $email_body = str_replace(
                     array('[BASEURL]'), 
                     array($site_url), 
                     $email_body 
                   ); 

           $message = Swift_Message::newInstance($subject) 
             ->setFrom($from_email) 
             ->setTo($to_email) 
             ->setBody($email_body); 
           $message->addPart($email_body, 'text/html'); 
           $message->attach(Swift_Attachment::fromPath($file_name)); 
         } 

         if($mailer->send($message)){ 
           $success = true; 
         } else { 
           $success = false; 
         } 

       } else { 
         header('Location: ' . $not_found); 
       } 
       echo json_encode($success); 
     } else { 
       header('Location: ' . $not_found); 
     } 
?> 

明らかに、SMTPヘッダー操作から保護されません。私はOWASPを見て、どのように悪用されたのかを列挙しましたが、何の対策も挙げていませんでした。誰でも手伝ったり、いくつかのリソースをリンクできますか?前もって感謝します。

答えて

-4

回答:SPF、DKIM、およびDMARCレコードを設定してください。

+0

いいえ、すべてのユーザー入力の検証について – rtfm