【问题标题】:php mail header injection preventionphp邮件头注入预防
【发布时间】:2010-01-07 07:54:33
【问题描述】:
在邮件功能的php手册页上,有一条用户评论说“注意防止标头注入”。
在我的应用程序中,我使用了邮件函数,而我用作函数参数的唯一用户输入是电子邮件地址。
我使用正则表达式 ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$ 对电子邮件地址进行初步检查。
这是否也可以防止标头注入?
谢谢,
jrh
【问题讨论】:
标签:
php
email
header-injection
【解决方案1】:
有人会想注入这样的东西:
user_address@domain.com
抄送:spam_address1@domain.com、spam_address2@domain.com、spam_address3@domain.com
您不允许 \r\n 这是定义新标头信息所需的。所以你的应用是安全的。
【解决方案2】:
仅当您将用户提供的内容放入邮件标头中时,标头注入才有风险。一个典型的例子是使用发布的电子邮件地址来设置回复标题。
这是我用的:
$email = preg_replace(array("/\r/i","/\n/i", "/%0a/i", "/%0d/i", "/Content-Type:/i", "/bcc:/i", "/to:/i", "/cc:/i", "/Content\-Transfer\-Encoding\:/i", "/Mime\-Version\:/i" ), "", $email);