在我将电子邮件插入数据库之前->我用

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);

最佳答案

if (filter_var($emailAdress, FILTER_VALIDATE_EMAIL))

是一个很好的方法,在php中虚拟电子邮件地址,然而,它确实使用regex,但到目前为止,那些已经证明是最好的。
$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));

唯一真正的问题是.这是一个特殊字符,它将影响正则表达式的工作方式,但是您真的需要在这里做正则表达式吗?你已经检查了它是一个完整的电子邮件地址,因此你只需要检查确切的电子邮件地址存在的地方(或者更好的是在字段上做一个唯一的索引)。
因此我认为你可以拿出正则表达式做一个精确的匹配。

07-28 09:22