在以下代码中,通过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);
答案 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运行它,然后将其转换为引用的可打印。