在我将电子邮件插入数据库之前 -> 我使用
验证地址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 中设置电子邮件地址的好方法,但是,它确实使用了正则表达式,但到目前为止,那些已被证明是最好的。
$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));
唯一真正的问题是 .
这是一个特殊字符,它会影响正则表达式的工作方式,但是你真的需要在这里做一个正则表达式吗?您已经检查过它是一个完整的电子邮件地址,因此您只需要检查确切的电子邮件地址存在于何处(或者最好在该字段上创建一个唯一索引)。
就我而言,我认为您可以去掉正则表达式并进行精确匹配。
关于regex - 带有正则表达式的 MongoDB findOne(安全漏洞?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728020/