【问题标题】:Randomly receiving empty emails via PHP script [duplicate]通过PHP脚本随机接收空电子邮件[重复]
【发布时间】:2021-11-02 17:37:57
【问题描述】:

我是帮助我姑姑建立个人网站的初学者。我有一个 HTML 表单,用户可以在其中联系她(为了清楚起见,稍微简化了):

<form id = "contact-form" method = "post" action = "contact-form-handler.php">
<input name = "name" type = "text" required><br>
<input name = "email" type = "email" required><br>
<textarea name = "message" class = "form-control" required></textarea><br>
<input type = "submit" class = "form-control submit" value = "SEND MESSAGE">
</form>

脚本contact-form-handler.php 读取,

<?php
    $name = $_POST['name'];
    $visitor_email = $_POST['email'];
    $message = $_POST['message'];

    $email_from = "SEND_EMAIL@ADDRESS.com";

    $email_subject = "Message from fziastories";
    $email_body = "Name: $name.\n".
        "Email: $visitor_email.\n".
        "Message: $message.\n";

    $to = "RECIEVE_EMAIL@ADDRESS.com";
    $headers = "From: $email_from \r\n";
    $headers .= "Reply-To: $visitor_email \r\n";
    mail($to,$email_subject, $email_body, $headers);
    header("Location: index.html");
?>

这种形式很好用。当我进入各种测试时,消息完美通过。当我没有为三个输入之一输入值时,我无法点击“发送消息”按钮。

除此之外,每隔一段时间,可能每周一次或两次,我都会收到一条没有填写任何值的空消息。这让我感到困惑,因为我认为当前的设置会阻止用户在不输入值的情况下提交表单,而且通过测试我已经排除了将有效响应作为空白输入的可能性。

如果有任何建议,我将不胜感激!如果您有任何后续问题,请随时提出。谢谢!

【问题讨论】:

  • 意识到不必通过您的表单来向您的服务器发送包含任意内容的 HTTP 请求。前端验证永远不够,最终您需要在 PHP 中进行验证。
  • 谢谢@deceze!

标签: php html


【解决方案1】:

HTML 表单中的required 标签不是很安全! 您应该始终验证服务器上的数据。

这可能看起来像这样:

<?php
    $name = $_POST['name'];
    $visitor_email = $_POST['email'];
    $message = $_POST['message'];


    if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) {
       header("Location: index.html");
       exit;
    }

    $email_from = "SEND_EMAIL@ADDRESS.com";

    $email_subject = "Message from fziastories";
    $email_body = "Name: $name.\n".
      "Email: $visitor_email.\n".
      "Message: $message.\n";

    $to = "RECIEVE_EMAIL@ADDRESS.com";
    $headers = "From: $email_from \r\n";
    $headers .= "Reply-To: $visitor_email \r\n";
    mail($to,$email_subject, $email_body, $headers);
    header("Location: index.html");
?>

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2013-10-30
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多