我有一个类在每次输入发送到数据库层之前验证它.请注意,我的问题不是逃避或任何事情.我的数据库层将处理SQL注入问题.我想要做的就是验证电子邮件是否有效,因为稍后该电子邮件可能被用作"发送到".例如,用户将通过发送到电子邮件的链接恢复对其帐户的访问.我读了很多filter_var
,有很多人反对它,其他人也赞成.专注于'我只是想验证电子邮件而不是为数据库或html或XSS或其他任何'过滤它,是否存在使用问题filter_var
?
com*_*857 24
是的你应该.
使用标准库验证而不是家庭酿造有一个好处:
但是,检查电子邮件地址的格式只是第一道防线,如果您真的想知道它是否真实,则必须向其发送消息.
是的,你应该使用filter_var
,这就是你如何融入它:
if( filter_var( $email ,FILTER_VALIDATE_EMAIL ) )
{
/*
* Rest of your code
*/
}
Run Code Online (Sandbox Code Playgroud)
是.但checkdnsrr()
这里也值得一提.
filter_var()
将批准似乎不完整的域,因为它可能在本地上下文中有效(例如某人@ localhost).这可能会导致人们错过TLD或域名中的点的误报(例如hattie.jacques@gmailcom)
通过checkdnsrr()
在域上进行查找来捕获这些- 如果您可以找到域的MX记录并且地址有效,那么您已经完成了最多的工作.
示例代码:
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
list($userName, $mailDomain) = explode("@", $email);
if (!checkdnsrr($mailDomain, "MX"))
{
// Email is unreachable.
}
}
else
{
// Email is bad.
}
Run Code Online (Sandbox Code Playgroud)
checkdnsrr()
很简单(根据我的经验),我还没有找到一个不起作用的环境.