2016-08-10 12 views
3

私の連絡フォームから空メールがたくさん届いています。それはそれを検証しているので、私はこれがどのように可能かわかりません。 SO誰かにここ確認済みのフォームで空のメールを受信

<?php 


// configure 
$from = 'myemail'; 
$sendTo = 'myemail'; 

$senderNaam = $_POST['naam']; 
$senderEmail = $_POST['email']; 

$subject = 'Contact'; 
$okMessage = '<p>Send succesfully!</p>'; 
$errorMessage = '<p>Error!</p>'; 

$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-Type: text/html; charset=utf-8" . "\r\n"; 
$headers .= "From: ". $from. "\r\n"; 
$headers .= 'Reply-To: '. $senderNaam." <".$senderEmail.">\r\n"; 

// let's do the sending 

try 
{ 
    $emailText = "New message\n=============================\n"; 

    $emailText = "<table> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Naam:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['titel']." ".$_POST['naam']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Bedrijfsnaam:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['bedrijfsnaam']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Adres:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['straat']." ".$_POST['huisnummer']." ".$_POST['toevoeging']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Postcode:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['postcode']." ".$_POST['letters']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Woonplaats:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['woonplaats']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Telefoonnummer:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['kengetal']." ".$_POST['telefoon']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>E-mailadres:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['email']."</td></tr> 
      <tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Bericht:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['bericht']."</td></tr> 
      </table>"; 

    mail($sendTo, $subject, $emailText, $headers); 

    $responseArray = array('type' => 'success', 'message' => $okMessage); 
} 
catch (\Exception $e) 
{ 
    $responseArray = array('type' => 'danger', 'message' => $errorMessage); 
} 

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    $encoded = json_encode($responseArray); 

    header('Content-Type: application/json'); 

    echo $encoded; 
} 
else { 
    echo $responseArray['message']; 
} 

?> 

ポストから:これは私の検証(contact.php)である

<form id="contact-form" method="post" action="contact.php" role="form"> 
<div class="messages"></div> 

        <div class="controls"> 
         <div class="row"> 
          <div class="col-xs-10"> 
           <div class="form-group"> 
           <label>Aanhef *</label> 
           <div class="label-group"> 
            <label class="radio-inline"><input class="radio" type="radio" required="required" value="Dhr." name="titel">Dhr.</label>          
            <label class="radio-inline"><input class="radio" type="radio" required="required" value="Mevr." name="titel">Mevr.</label>          
            <div class="help-block with-errors"></div> 
           </div> 
           </div> 
          </div> 
         </div> 

         <div class="row"> 
          <div class="col-md-12"> 
           <div class="form-group"> 
            <label for="form_email">E-mail adres *</label> 
            <input id="form_email" type="email" name="email" class="form-control" pattern="^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,})$" placeholder="Uw e-mailadres *" required="required" data-error="Uw e-mailadres (zonder spaties!)"> 
            <div class="help-block with-errors"></div> 
           </div> 
          </div> 
         </div> 
        </div> 
</form> 

この

は私のフォームである(のみ指示を与えるために1行を与えました) 「あなたはアクションURLがPOSTデータなしでブラウザから直接アクセスできると思ったことがありますか?そうすれば、すべての「フィールド」が空になります。

これは問題の可能性がありますが、これを解決する方法はわかりません。私のメールボックスは完全なLOLを実行しているので、誰かがアイデアを持っていますか?

EDIT 1:さてさて、私はこの試みた:。

// add all your other fields here 
if (!isset($_POST['naam']) || !isset($_POST['email'])) { 
mail($sendTo, $subject, $emailText, $headers); 
} 
$responseArray = array('type' => 'success', 'message' => $okMessage); 

しかし、誰結果は、まだ "フォームが正常に送信" :(言う私のブラウザでcontact.phpを開くことができませんが

+0

誰でも私を助けてくれますか? – Jorus

答えて

1

あなたはそうではありませんあなたのPHPでサーバー側の検証を実行することができます。したがって、私のブラウザでwww.yoursite.com/contact.phpを指定すると空メールを送信し続けることができます。

さらに、mail関数は例外を投げるので、 try/catchここにブロックしてください。失敗したことを知るには、その関数の戻り値をチェックする必要があります。

あなたはこのような$_POSTからユーザー提供の入力にいくつかの基本的な検証を行うことができます...

// add all your other fields here 
if (!isset($_POST['naam']) || !isset($_POST['email'])) { 
    /* user did not supply there name/email don't send mail */ 
} 


// you may also want to do additional validation like required input length or valid email 
if (strlen($_POST['somefield']) < $requiredLength) { 
    /* input too short */ 
} 
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
    /* not a valid email address */ 
} 

また、あなたは盲目的にあなたの電子メールのヘッダにユーザ提供の入力を注入してはなりません。たとえば、ユーザーがCRLF文字を使用して値を指定した場合、電子メールにヘッダーを挿入できます。電子メールヘッダーに追加する前に、すべてのCRLF文字を$senderNaam$senderEmailから削除する必要があります。

また、HTMLを使用しているので、ブラウザのようにユーザー入力からHTMLインジェクションを受けることもあることを忘れないでください。出力にはhtmlentitiesまたはhtmlspecialcharsを必ず使用してください。

"<tr>" . 
    "<td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Naam:</td>" . 
    "<td style='padding-left: 10px; font-weight: bold;'>". 
     htmlspecialchars($_POST['titel']) ." ". htmlspecialchars($_POST['naam']) . 
    "</td>" . 
"</tr>" 

また、検証だけでは誰でもあなたの連絡先フォームをスパムしないようにすることはできません。このPHPスクリプトに何千ものリクエストを送信するスクリプトを書くのは簡単です。

これを防止するために、reCaptchaのようなものをフォームに追加してみてください。

+0

うわー、ありがとう!これは私の頭よりもはるかに上手くいくものですが、試してみます。私はまた、いくつかのフィールドで "入力パターン"を使用しています、それは何かを変更しますか?私は "あなたのCRLF文字を削除する"ことを意味する、私の$ヘッダー内のすべての\ r \ nを取り除くことを忘れていますか?私は私のHTMLにPHPコードを配置する場合、それは物事をより簡単にしますか? ( – Jorus

+0

はい、「\ r \ n」は**キャリッジリターン**と**改行**文字です – Sherif

+0

ありがとうございます。残念ながら、私はそれを可能な限り単純にする必要があります。私の問題をまだ解決することはできませんでした。簡単な解決策があれば教えてください。その間に私は苦労します。 – Jorus

関連する問題