我正在寻找最安全,最有效的方式将php邮件用于基本表单。
我有下面的代码,它似乎运行得很好,但我对php很新,并希望输入是否有更好的方法来执行它。我是否应该采取更多措施来帮助防止注射?或者我甚至需要用纯文本电子邮件担心吗?
现在我正在清理电子邮件字段。我应该消毒所有领域吗?我想出了如何验证电子邮件,但问题是我不喜欢它,如果一个合法的用户写了一个超长的消息,并在他的电子邮件中意外输入错误,那么php给出了一封无效的电子邮件错误并擦除整个消息。我宁愿只是消毒它,消息仍然会被发送。我确实有Jquery验证,所以也有帮助。
我对如何改进此表单提出任何建议,或者如果您看到我做错了什么,请告诉我们!谢谢。
<?php
if (isset($_POST['submit'])) {
$send_to = "receiver@domain.com";
$subject = "Contact Page Form";
$headers =
'From: "Sender Name" <sender@domain.com>' . "\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 :(得分:0)
如果服务器端的验证失败,您只需要使用提交的值重新填充表单:
NAME: <input type="text" name="name" value="<?php echo $name; ?>" required>
在提交检查之前将变量设置为默认值,以避免“未定义变量”错误。
接下来,如果您担心有效性,则应避免直接调用mail()
- 您的脚本现在容易受到标头注入攻击和各种损坏的影响。使用像PHPMailer这样的库(您已将问题标记为)来正确执行此操作,并按照处理表单时提供的示例进行操作。