2

在我将电子邮件插入数据库之前 - >我验证地址

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

1 回答 1

1
if (filter_var($emailAdress, FILTER_VALIDATE_EMAIL))

是在 PHP 中 vlaidate 电子邮件地址的好方法,但是,它确实使用正则表达式,但到目前为止,这些已被证明是最好的。

$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));

唯一真正的问题是.这是一个特殊字符,它会影响正则表达式的工作方式,但是你真的需要在这里做一个正则表达式吗?您已检查它是一个完整的电子邮件地址,因此您只需要检查该确切电子邮件地址的存在位置(或者更好地在该字段上建立一个唯一索引)。

因此,我认为您可以取出正则表达式并进行完全匹配。

于 2013-07-18T16:30:22.613 回答