是否存在PHP生成的电子邮件的常见风险?

时间:2015-02-27 13:13:51

标签: php email

在以下代码中,通过PHP,Apache和Linux发送电子邮件。来自网站用户$comment及其$emailFrom地址的评论显然可能是未知的。由于任何常见的安全风险,这些字段是否需要进行任何过滤?接收电子邮件系统将是Gmail并由人工处理,除了互联网固有的软件外,没有其他介入软件。

$headers = "From: " . $emailFrom . "\r\n" .
           "Reply-To: " . $emailFrom . "\r\n" .
           "X-Mailer: PHP/" . phpversion();
mail("websiteOwner@mailDomain.com", 
     "a message from somebody that viewed my website ",
     $comment, $headers); 

2 个答案:

答案 0 :(得分:1)

请注意,此问题可能更适合Stackoverflow / Codereview。请查看此帮助文章' What topics can I ask about here?'了解更多信息。


如果您查看this问题,问题的OP已粘贴整个脚本,您可以将其用作验证等指南。

这两个答案建议使用已经制作的发送邮件的解决方案,我想补充一下:


为什么要使用第三方库:

  • 维护费用减少
  • 大部分工作都是为你完成的
  • 不要为每一个小小的共同任务重新发明轮子。

为了解决您问题的安全问题,我想补充一点:    - 您必须验证并过滤传递给脚本的信息,这应该是一般的做法,不仅是在发送电子邮件的情况下,而且只要在应用程序中使用用户提供的输入时。

  

开发人员需要设计软件,并认识到他们的一些用户会变得邪恶,并进行相应的设计。您无法信任用户输入。 - Jeff Atwood here

答案 1 :(得分:0)

您已经(简洁地)指出了电子邮件标头注入的问题。

下一个问题是电子邮件的正文可能包含对收件人有害的内容。尽管MIME电子邮件需要特定标头来宣布它包含MIME编码数据,但某些MTA将接受并透明地重新编码二进制流。并且一些MUA会愉快地将/ ^ begin [0-7] {3,4} [a-zA-Z _。] + /之后的任何内容转换为附件。

即。因为它代表你的代码几乎允许任何人向任何人发送任何东西。

另一个问题是,仍有很多写得很糟糕的网络邮件客户端(也有很多好的)允许嵌入的iframe和正文中的脚本。 Gmail是最好的之一,但在那里仍然存在可利用漏洞的可能性。

即。一旦你修复了标题注入的东西,你可能想检查正文中的uu和base64编码并通过strip_tags运行它,然后将其转换为引用的可打印。