【问题标题】:Sending mail using php mail() -- abusing 'from' email address使用 php mail() 发送邮件——滥用“发件人”电子邮件地址
【发布时间】:2014-09-22 06:02:41
【问题描述】:

我正在使用 mail() 函数在 php 中实现联系表单。在联系表单中,我询问用户的电子邮件地址,提交后我将他们的消息发送到我自己的电子邮件地址。

这是我的 php 代码:

    $to = 'myemail@gmail.com';
    $from_name = $_POST['InputName'];
    $from_email = $_POST['InputEmail'];
    $subject = 'Message from '.$from_name;
    $message = $_POST['InputMessage'];
    $headers = 'From: '.$from_email."\r\n".'Reply-To: '.$from_email.
        "\r\n".'X-Mailer: PHP/'.phpversion();
    $mailsuccess = mail($to,$subject,$message,$headers);

在对此进行测试后,我意识到有人可以向我发送一封伪装成其他人有效电子邮件地址的电子邮件。例如,在测试期间,我使用了朋友的电子邮件并给自己发了一条消息。这不是安全问题吗?在我的 gmail 帐户中,我确实收到了一条警告,指出这封电子邮件可能不是来自那个人,但如果不是明显垃圾邮件,我通常会忽略该警告。

例如,如果 Bob (bob@gmail.com) 通过伪装成 Chris (chris@gmail.com) 的联系表单发送消息,我将在电子邮件中回复 Chris。克里斯认为他的电子邮件被黑了,因为他从未发送过那封电子邮件。这通常是一个问题吗?或者有没有办法让它更安全?

【问题讨论】:

  • 任何不需要登录的联系表单都会出现该问题,但您的代码确实存在其他问题
  • 这是整个电子邮件中的一个巨大的普遍问题,一些 Webmail 客户端,例如 Roundcube 让您拥有多个身份,每个身份都有自己的电子邮件地址,无论它是否真的属于您.有一些方法可以使用 DKIM 和其他方法来缓解这种情况,但通常并不完美,而且绝对不会出现在您的情况下;除非您添加某种 Sign-in with Google 功能并从 Google API 获取他们的电子邮件,否则您将拥有站点范围的登录和可信赖的电子邮件,显然只有 Google 会很愚蠢,+标准帐户需要验证电子邮件所有权。
  • 另一种解决方案是给他们发送一封电子邮件,要求他们在发送邮件之前确认他们的地址。
  • 更安全的方法是首先发送电子邮件至chris@gmail.com 要求他点击链接,如果事实上是他填写了联系表格,否则忽略联系请求。
  • @BaileyHerbert 比我早 13 秒哈哈

标签: php forms security email


【解决方案1】:

这称为电子邮件欺骗。 SMTP 不是一个非常安全的协议。欺骗总是有可能的。不幸的是,除非地球上的每个电子邮件服务器都进行更改以解决该问题,否则无法解决,这是不太可能的。

很多网络钓鱼和垃圾邮件就是这样发生的。

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2011-11-18
    • 2012-04-13
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多