什么是防止PHP中的电子邮件注入攻击的最佳做法?

问题描述:

这些日子被认为是从PHP电子邮件表格中清理数据的最佳实践吗?什么是防止PHP中的电子邮件注入攻击的最佳做法?

我目前使用这样的事情

...

$msg = $_POST['msg']; 
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); 
$name = $_POST['name']; 

$subject = "Message from the MY_WEBSITE website e-mail system"; 
$message = "From: " . $name . "\n"; 
$message .= "Email: " . $email . "\n\n"; 
$message .= $msg; 
$headers = "From: " . $email . "\r\n" . 
      "Reply-To: " . $email . "\r\n" . 
      "X-Mailer: PHP/" . phpversion(); 

$mailSuccess = mail("[email protected]", $subject, $message, $headers); 

是否足够保护简单地以这种方式过滤电子邮件字段?我能否/应该更有效地强化脚本以防止垃圾邮件发送者?

在此先感谢!

[编辑]澄清,因为到目前为止的答案表明我没有很好地解释自己。

我主要不在乎垃圾邮件获取该脚本,但任何人利用它将非法邮件发送到[email protected]以外的任何地址。这可能包括一个机器人,但同样可能是一个击败CAPTCHA测试的人。

我在找的是PHP,它可以确保mail()方法发送的邮件不被劫持。这可能是一个正则表达式或过滤器或类似的东西,只是剥离某些字符。再次感谢[/编辑]

我这样做:

  • 使用CAPTCHA;
  • 如果主题或正文包含任何HTML标记,则无法发送。注意:我没有说出去。只是不要发送电子邮件,并给用户一个错误信息为什么。发送自己的垃圾邮件信息毫无意义。只是不要发送它;
  • 去掉任何高或低的字符(filter_vars()可以做到这一点);
  • 将讯息限制为4000个字符(或您选择的其他适当限制);
  • 如果邮件中包含任何未指向当前网站的网址,则会失败;
  • 有争议地使用How do you stop scripters from slamming your website hundreds of times a second?中的一些技术来确保有人发送消息。
+0

>最佳实践(imho)不是将电子邮件发送到HTML表单提供的电子邮件地址。 为了清楚这一点,所提供的代码不 - 或至少不应该 - 发送电子邮件给网站所有者以外的任何人。该地址被硬编码到PHP([email protected])中。我想要确保的是,没有人劫持脚本,就像传统的\ ncc:[email protected]垃圾邮件一样。 感谢您的链接! :c) – Wikiup 2009-05-05 09:12:20