保护php电子邮件表单

时间:2016-01-12 00:02:57

标签: php html email

我想知道我所做的是否会停止在我的电子邮件表格中注入。

<?php 
if(isset($_POST['submit'])){
    $to = "ask@mywebsite.co.uk"; 
    $from = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $subject = "Form submission";
    $subject2 = "Copy of your form submission";
    $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
    $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];

    $headers = "From:" . $from;
    $headers2 = "From:" . $to;
    mail($to,$subject,$message,$headers);
    mail($from,$subject2,$message2,$headers2); 
    echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";

}
?>

2 个答案:

答案 0 :(得分:3)

标题是唯一的注入点,您只有一个变量来处理 $ from ,而您使用filter_var

进行此操作

答案 1 :(得分:3)

停止注入攻击最重要的是正确地为目标上下文转义内容。

您已经通过过滤来自电子邮件地址来完成此操作,在这种情况下足以保护电子邮件地址不会导致问题。但一般来说,过滤不足以防止注入攻击。

你也会对你的主题进行硬编码,这很好。 mail()的文档要求主题必须满足RFC 2047,这可能比任何人实际想做的更多。对于这些类型的表单,最好使用代码中定义的主题,以便您可以避免任何意外,因此您可以参与其中。

一般情况下,您希望确定主题,尤其您添加到电子邮件中的任何标题包含意外的换行符,因为这是主要的mail()的攻击向量。由于您的标题仅包含已清理的静态电子邮件地址,因此您也应该很好。