我听说过 PHP 表单被滥用来从表单应该发送给的人发送电子邮件。这是一个实际问题吗?如果是,如何解决?是不是类似于防止SQL注入?
问问题
295 次
2 回答
2
您正在谈论电子邮件注入安全漏洞。例如,如果您将自定义标头传递给mail()
以下代码示例中的函数,那么您很容易受到攻击:
<?php
$additional_headers = "Reply-To: {$_GET['user_email']}";
mail($to, $subject, $message, $additional_headers);
?>
考虑到恶意用户不仅传递了他的电子邮件,而且还传递了额外的标头,如下所示:
<?php
//$_GET['user_email'] = "me@example.net";// this is what you expect
// this is what you're getting actually
$_GET['user_email'] = "me@example.net\r\nBcc: someone@example.net, ...";
?>
然后,恶意用户会将他所谓的垃圾邮件充斥邮件的副本发送到您名下的服务器上几乎无限的用户列表。通过添加某些其他安全的 MIME 标头,您甚至可以用他自己的方式完全替换您的消息。你只能想象这会导致什么后果!
解决方案很简单:不要信任您从用户那里收到的任何内容,并过滤/验证收到的数据。
于 2012-09-08T01:50:48.883 回答
0
如果输入未正确过滤,任何形式都容易受到攻击。无论是电子邮件表单、注册表单,还是由 PHP 支持都没有关系。
对于电子邮件表单,请考虑 PHP 的过滤器功能以正确清理电子邮件。
一个好的经验法则是记住 FIFO:过滤输入,转义输出。
超全局变量几乎应该被认为是脏的并且需要过滤(输入)。输出转义取决于上下文:向某人发送电子邮件、插入数据库、以 HTML 呈现——所有这些都需要不同的输出过滤技术。
于 2012-09-08T01:24:13.033 回答