在我将电子邮件插入数据库之前 - >我用
验证地址if (filter_var($emailAdress, FILTER_VALIDATE_EMAIL))
{
....
}
..但这可能是一个安全漏洞吗?
$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));
我能这样做吗?或者没必要?
$emailAdress= preg_replace("/\@/", '\@', $emailAdress);
$emailAdress= preg_replace("/\-/", '\-', $emailAdress);
$emailAdress= preg_replace("/\./", '\.', $emailAdress);
答案 0 :(得分:1)
if (filter_var($emailAdress, FILTER_VALIDATE_EMAIL))
在PHP中使用电子邮件地址是一种很好的方式,但它确实使用了正则表达式,但到目前为止,这些已被证明是最好的。
$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));
唯一真正的问题是.
这是一个特殊的角色会影响正则表达式的运作方式,但你真的需要在这里做一个正则表达式吗?您已经检查过它是一个完整的电子邮件地址,您只需要检查确切的电子邮件地址的存在位置(或者更好地在该字段上创建一个唯一的索引)。
我认为你可以拿出正则表达式并完全匹配。