PHP安全邮件变量

时间:2010-08-21 19:28:18

标签: php email gmail security

在php上创建一个小型联系表单,它会收到$_POST个变量和邮件给我。

<form action="/myscript.php" method="post">

小段代码:

$subject = trim($_POST['subject']);
$comment = trim($_POST['comment']);
mail($email, $subject, $comment, $headers);

$email是我的邮件地址,通常是$headers

主题和评论没有过滤。 它可能成为我网站的潜在安全漏洞吗?

我的邮件放在gmail.com上。 当我在浏览器中打开gmail界面时,来自我网站的未经过滤的邮件是否会伤害我?

我应该如何过滤所有变量?在发送电子邮件后,我希望在我的网站上有一些echo。 (比如'谢谢,%name%!')

3 个答案:

答案 0 :(得分:1)

不,这不是那么危险。 Gmail不信任您收到的电子邮件,否则每个垃圾邮件发送者都会让您妥协。

但是,至少检查变量是否存在以及它们的长度是否超过最大值是一个好习惯。

编辑旧版本的PHP可能容易受到电子邮件注入攻击,如here所述。它不会危及您的网站,您的电子邮件客户端应该能够安全地处理恶意电子邮件,但可能会使您成为垃圾邮件中继。

新版本不会出现此漏洞,因为所有控制字符(低于0x20的控制字符)都是sanitized。你可以像这样做同样的卫生:

$subject = filter_input(INPUT_POST, "subject", FILTER_UNSAFE_RAW,
    FILTER_FLAG_STRIP_LOW);
if ($subject === false) { /* subject not given/not scalar; handle it */ }

答案 1 :(得分:1)

是的,它很危险,容易受到邮件注入的攻击 虽然它不会伤害您的网站,但可以被垃圾邮件发送者使用。

$subject = "Site feedback";
$comment = trim($_POST['subject'])."\n\n".trim($_POST['comment']);
mail($email, $subject, $comment);
这个人会很安全。

答案 2 :(得分:1)

可能你可以查看http://swiftmailer.org/一个php邮件程序组件库,以便将你的解决方案与它进行比较。 Swiftmailer是symfony-project.org等框架的邮件解决方案。

纯文本不是网站的问题,附件是,但评论和主题不会在您的服务器中造成任何问题。关于gmail,它有自己的电子邮件验证,因此有病毒或类似的电子邮件很难通过他们的分析。 RGDS。