电子邮件标题注入

时间:2013-08-21 22:20:23

标签: php forms html-email

我想知道以下代码是否会阻止我的HTML电子邮件表单中的电子邮件标题注入?

(我从其他网站引用了这段代码。)

我的代码如下。

$SpamErrorMessage = "Whoa, slooooooow doooown";
if (preg_match("/http/i", "$first")) {echo "$SpamErrorMessage"; exit();}
if (preg_match("/http/i", "$last")) {echo "$SpamErrorMessage"; exit();}
if (preg_match("/http/i", "$email")) {echo "$SpamErrorMessage"; exit();}
if (preg_match("/http/i", "$message")) {echo "$SpamErrorMessage"; exit();}


/* Email Variables */
$emailSubject = 'You have received an inquiry from your website';
$webMaster = 'info@3elementsreview.com';

/* Data Variables */
$first = Trim(stripslashes($_POST['First']));
$last = Trim(stripslashes($_POST['Last']));
$email = Trim(stripslashes($_POST['E-Mail']));
$message = Trim(stripslashes($_POST['Message']));

$body = <<<EOD
<span style="color:#454545; font-weight:bold; font-size:1.6em;">$first</span><br>

<span style="color:#454545; font-weight:bold; font-size:1.6em;">$last</span><br>

<span style="color:#454545; font-weight:bold; font-size:1.6em;">$email</span><br>
<br>
<span style="color:#252525; font-size:1.4em;">$message</span><br>
EOD;
$headers = "From: $email\r\n";
$headers .= "Content-type: text/html\r\n";
$success = mail($webMaster, $emailSubject, $body,
$headers);

2 个答案:

答案 0 :(得分:1)

简单的答案是:

  

从不, EVER 发送冒充他人的电子邮件。

好的,所以他们填写了表单中的“发件人”框,也许这是一个有效的电子邮件地址。这并不意味着在技术上或道德上正确发送该地址的电子邮件。这样做的事情几乎可以保证与这些天的SPF或DKIM支票相冲突,所有邮件都将被扔进垃圾箱。

应该做的是发送包含您自己域内“发件人”地址的电子邮件。它也应该是一个可以处理任何反弹的真实账户。

或者如果你想要这样做,你应该尝试验证你的输入数据是否符合预期的格式,即'是一个电子邮件地址'。有many regular expressions这样做。

目前,您的代码只是检查输入是否包含字符串'http',说“足够好”,然后直接发送消息。

答案 1 :(得分:1)

是的,您很容易受到使用提供的代码的攻击。<​​/ p>

除了@Sammitch列出的应该修复的'From'地址的问题之外,我建议扫描任何输入,这些输入将包含在消息体中或字符串“Content-Type:multipart /”的标题中。

可以通过多部分边界将各种数据注入到外发消息中: http://en.wikipedia.org/wiki/MIME#Multipart_messages