2015-07-11 99 views
0

我正在尋找最安全和最有效的方式來使用PHP郵件的基本形式。PHP郵件 - 基本形式的消毒和驗證

我有下面的代碼,它似乎正常工作,但我很新的PHP,並希望輸入,如果有更好的方法來執行此操作。我應該多做些什麼來幫助防止注射?或者我甚至需要擔心用純文本電子郵件?

現在我正在清理電子郵件字段。我應該清理所有領域嗎?我想出瞭如何驗證電子郵件,但問題是我不喜歡它,如果一個合法用戶寫超長消息,並意外地在他的電子郵件中輸入一個錯誤,那麼PHP提供了一個無效的電子郵件錯誤,擦掉整個信息。我寧願只是消毒它,並且消息仍然被髮送。我確實有Jquery驗證,所以也有幫助。

我願意接受任何關於如何改善此表格的建議,或者如果您發現我做錯了任何事情,請告訴我!謝謝。

<?php 
if (isset($_POST['submit'])) { 


$send_to = "[email protected]"; 
$subject = "Contact Page Form"; 
$headers = 
'From: "Sender Name" <[email protected]>' . "\r\n" . 
'Reply-To: ' . $_POST['name'] . '<' . $_POST['email'] . '>' . "\r\n" . 
'Content-type: text/plain; charset=iso-8859-1'; 
'X-Mailer: PHP/' . phpversion(); 
$success = "<p class=\"formsuccess\">Thank you. We received your message!</p>"; 


$name = $_POST['name']; 
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
$phone = $_POST['phone']; 
$message = $_POST['message']; 

$content = " 
Name: $name 
Email: $email 
Phone: $phone 

Message: $message 
"; 

mail($send_to,$subject,$content,$headers); 
echo $success; 

} else { 
?> 
<form id="contactform" method="post"> 

NAME: <input type="text" name="name" required> 
EMAIL: <input type="email" name="email" required> 
PHONE: <input type="tel" name="phone" required> 
MESSAGE:<textarea name="message" required></textarea> 

<button type="submit" name="submit">Submit</button> 

</form> 
<script> 
$("#contactform").validate(); 
</script> 
<?php } ?> 

回答

0

如果驗證服務器端失敗,你只需要提交值重新填充表單:

NAME: <input type="text" name="name" value="<?php echo $name; ?>" required> 

設置變量設置爲默認值之前,您提交的檢查,以避免「未定義的變量」錯誤。

接下來,如果你擔心有效性,你應該避免直接調用mail() - 你的腳本現在很容易受到頭部注入攻擊和各種腐敗。使用像PHPMailer這樣的庫(您已經標記了該問題)正確地執行此操作,並遵循處理表單提供的示例。