如何在PHP中防止电子邮件注入攻击的最佳实践?

3

现在对于从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("me@example.com", $subject, $message, $headers);

这种过滤邮件字段的方法足够保护吗?我能/应该更有效地加强脚本以防范垃圾邮件发送者吗?
提前感谢!
[编辑]澄清,因为到目前为止的答案表明我没有解释清楚。
我主要关心的不是垃圾邮件机器人获取此脚本,而是任何人利用它向除me@example.com之外的任何地址发送非法电子邮件。这可能包括机器人,但同样也可能是通过CAPTCHA测试的人类。
我正在寻找的是能确保mail()方法发送的电子邮件不被劫持的PHP代码。这可能是一个正则表达式或过滤器,只需删除某些字符即可。再次感谢。[/编辑]
1个回答

2
我会这样做:
  • 使用CAPTCHA;
  • 如果主题或正文包含任何HTML标签,则不能发送。注意:我没有说要去除它们。只需不发送电子邮件并向用户提供错误消息即可。过滤垃圾邮件没有意义。不要发送它;
  • 删除任何高或低字符(filter_vars()可以完成此操作);
  • 将消息限制为例如4000个字符(或您选择的其他适当限制);
  • 如果消息包含未指向当前站点的任何URL,则失败;
  • 可以借鉴如何防止脚本作者以每秒数百次的速度攻击您的网站?中的某些技术,以确保发送消息的是人类。

最佳实践(我的看法)是不要向从HTML表单提供的电子邮件地址发送电子邮件。只是为了明确这一点,提供的代码不会--或者至少不应该--向除站点所有者之外的任何人发送电子邮件。该地址已硬编码到PHP中(me@example.com)。我想要确保的是没有人劫持脚本,就像经典的\ncc:victim@victim.com垃圾邮件攻击一样。谢谢您提供链接! :c) - Wikiup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接