【问题标题】:protecting php email form保护php电子邮件表单
【发布时间】:2016-01-12 00:02:56
【问题描述】:

我想知道我所做的是否会阻止我的电子邮件表单上的注入。

<?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.";

}
?>

【问题讨论】:

  • 谢谢,我觉得这似乎太容易了。
  • 这取决于你对“注入”的定义

标签: php html email


【解决方案1】:

标头是唯一的注入点,您只有一个变量需要处理 $from,而您可以使用 filter_var

【讨论】:

    【解决方案2】:

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

    您已经通过过滤发件人电子邮件地址来做到这一点,在这种情况下足以保护电子邮件地址不引起问题。但一般来说,过滤不足以防止注入攻击。

    您还可以对主题进行硬编码,这很好。 mail() 的文档要求主题必须满足 RFC 2047,这可能比任何人实际想要的阅读量都多。对于这些类型的表单,最好使用在您的代码中定义的主题,这样您就可以避免任何意外,这样您就可以覆盖其中。

    一般来说,您要确保主题,尤其是您添加到电子邮件中的任何标题,不要包含意外的换行符,因为这是主要的mail() 的攻击向量。由于您的标头仅包含经过净化的静态电子邮件地址,因此您也应该很好。

    【讨论】:

    • 他的主题是硬编码
    • @Dagon 已更新。我不知道我是怎么错过的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2013-11-04
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多