题
在邮件功能在PHP手册,有一个用户评论说:“小心,防止头注入。”
在我的申请中,我使用的邮件功能,以及我作为参数传递给该函数使用的唯一的用户输入是电子邮件地址。
我使用正则表达式^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$
的电子邮件地址的初步检查。
可否这也防止对头注入?
谢谢,结果 JRH
解决方案
有人将要注入是这样的:
user_address@domain.com结果 CC:spam_address1@domain.com,spam_address2@domain.com,spam_address3@domain.com
您不允许的 \ r \ n的需要用于定义新的报头信息即可。所以,你的应用是安全的。
其他提示
头喷射的风险仅如果你把用户提供的东西的消息头的内部。一个tipical例子是使用所张贴的电子邮件地址,设置回复-To报头。
这是我使用:
$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);
不隶属于 StackOverflow