2016-01-15 31 views
1

所以在過去2個月我的網站在線,我收到了2封來自我的聯繫表格的普通電子郵件,並且收到了30封空的未填寫表格電子郵件。我也使用驗證器http://faireware.de/js/jquery.form-validation-and-hints.js。 奇怪的是,我沒有得到這些空的電子郵件時,即我不填表格,並按發送。它以某種方式自動發生......垃圾郵件或其他東西,它可能是什麼?收到電子郵件上未填寫的聯繫表格

我的HTML代碼:

<form method="post" action="contactengine.php"> 

    <div class="field required"> 
    <p>Name<br> 
    <input class="text verifyText hint" name="name" type="text" size="25" title="*Ihr Name..."></p> 
    </div><!--/field--> 

    <div class="field required "> 
    <p>E-Mail<br> 
    <input class="email verifyMail hint " name="email" type="text" size="25" title="*Ihre E-Mail-Adresse..."></p> 
    </div><!--/field--> 

    <div class="field required "> 
     <p>Nachricht<br> 
     <textarea name="message" rows="50" cols="50" title="*Schreiben Sie Ihre Nachricht..." class="hint "></textarea></p> 
    </div><!--/field--> 
    <p><input class="submit" type="submit" value="Senden"></p> 
</form> 

和我contactengine.php是:

<?php 

$Subject = "Kontaktformular - FaireWare"; 
$Name = Trim(stripslashes($_POST['name'])); 
$Email = Trim(stripslashes($_POST['email'])); 
$Message = Trim(stripslashes($_POST['message'])); 
$EmailFrom = $Email; 
$EmailTo = "[email protected]"; 

// validation 
$validationOK=true; 
if (!$validationOK) { 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
    exit; 
} 

// prepare email body text 
$Body = ""; 
$Body .= "Name: "; 
$Body .= $Name; 
$Body .= "\n\n"; 
$Body .= "E-Mail: "; 
$Body .= $Email; 
$Body .= "\n\n"; 
$Body .= "Nachricht: "; 
$Body .= "\n"; 
$Body .= $Message; 
$Body .= "\n\n"; 

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: $Email"); 

// redirect to success page 
if ($success){ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.html\">"; 
} 
else{ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
} 
?> 

和空電子郵件的形式做出來是這樣的:

Name: 

E-Mail: 

Nachricht: 

它做它是自動的,它如何超過驗證......?我不知道PHP和很少的Java,所以沒有人知道問題出在哪裏?

謝謝!

+4

如果你直接點擊contactengine.php然後發送空白郵件。請添加服務器端驗證,在客戶端添加驗證碼。 –

+2

其驗證問題,$ validationOK默認爲true。驗證碼在哪裏? – devpro

+2

在發送郵件之前,您並未驗證字段,即字段是否爲空。使用'empty()'函數。 –

回答

2

你可以試試這個,我已經用基本的服務器端驗證修改了你的代碼。

<? 
if(count($_POST) > 0) 
{ 
    $Subject = "Kontaktformular - FaireWare"; 
    $Name = trim(stripslashes($_POST['name'])); 
    $Email = trim(stripslashes($_POST['email'])); 
    $Message = trim(stripslashes($_POST['message'])); 
    $EmailTo = "[email protected]"; 

    $validationOK = true; 
    if(empty($Name) || empty($Email) || empty($Message)){ 
     $validationOK = false; 
    } 

    if (!$validationOK) { 
     print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
     exit; 
    } 
    else 
    { 
     // prepare email body text 
     $Body = ""; 
     $Body .= "Name: "; 
     $Body .= $Name; 
     $Body .= "\n\n"; 
     $Body .= "E-Mail: "; 
     $Body .= $Email; 
     $Body .= "\n\n"; 
     $Body .= "Nachricht: "; 
     $Body .= "\n"; 
     $Body .= $Message; 
     $Body .= "\n\n"; 
     $headers = 'From: $Email' . "\r\n"; 

     // send email 
     $success = mail($EmailTo, $Subject, $Body, $headers); 

     // redirect to success page 
     if ($success){ 
      print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.html\">"; 
     } 
     else{ 
      print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
     } 
    } 
} 
?> 

我改變了什麼?

添加開始檢查,如果$_POST數組不是0,並且添加基本驗證empty()If任何一個字段的空電子郵件將不會發送else您將收到電子郵件。

+0

謝謝你的幫助。我會嘗試這一點,我會讓你知道我得到更多空缺的聯繫表單電子郵件。對不起,我想我應該發送鏈接,以便看到它在現實生活中的樣子:http://faireware.de/test/kontaktformular.html – DraKal

+0

閱讀@Android Gears的評論後,我剛纔注意到,如果有人直接打開contactengine .php,它向我發送一封空郵件。我的猜測是,沒有普通用戶會這樣做。那麼垃圾郵件機器人呢? 你的代碼不會,這已經很棒了! :) – DraKal

+0

@drakal是的,我知道它現在會工作,如果你摔倒這是最好的答案比標記接受點擊左邊的綠色勾,這將有助於未來的其他人 – devpro

2

嘗試將服務器端代碼更新爲不可破解以避免垃圾郵件。這裏有一些建議。

  1. Google Recaptcha
  2. Honeypot Technique

還做服務器端isset檢查。

if(isset($_POST['name'])){ 
// Save the data or do the further processing 
} 

建議:開發安全應用程序時不要依賴客戶端驗證。

+0

謝謝你的幫助。在成本方面,我寧願不使用Captcha。這只是一個簡單的聯繫表單,供人們聯繫,而不是我收到垃圾郵件。如果沒有其他幫助,我會這樣做。感謝您的鏈接。 – DraKal

相關問題