假设我们正在发送微不足道的反馈意见并将这些字段变为动态:
这个PHP代码足以保护我们免受各种邮件注入吗?
//sanitizing email address
if ($email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
//encoding subj according to RFC and thus protecting it from all kinds of injections
$subject = "=?UTF-8?B?".base64_encode($_POST['subject'])."?=";
//encoding name for same reasons, and using sanitized email
$from = "From: =?UTF-8?B?".base64_encode($_POST['name'])."?= <$email>\r\n";
//protecting body as it mentioned in http://php.net/mail
$message = str_replace("\n.", "\n .", $_POST['text']);
mail('me@example.com',$subject,$message,$from);
}
目前我正在使用"some@email.com, other@email.com,"
这样的名称,但似乎所有可用的邮件客户端都正确处理
答案 0 :(得分:2)
这个PHP代码足以保护我们免受各种邮件注入吗?
只要您的电子邮件客户端支持您在标头中使用的RFC 2047编码方法,它就会非常全面。 (某些Webmail客户端无法识别编码。)
除了不使用mail()
之外,我唯一的建议是考虑is_email而不是内置过滤器。内置程序失败了许多边缘情况。
答案 1 :(得分:0)
这取决于,如果过滤器符合rfc指定本地部分不能包含任何内容,如果它被“或某些地址包围”foo \ r \ nTo:poor-guy@dom.tld \ r \ n nTo:dummy“@ foo.tld将为您提供如下标题:
Subject: foo
To: poor-guy@dom.tld
To: dummy"@foo.tld
非常糟糕......