Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB findOne与regex(安全漏洞?)_Regex_Security_Mongodb - Fatal编程技术网

MongoDB findOne与regex(安全漏洞?)

MongoDB findOne与regex(安全漏洞?),regex,security,mongodb,Regex,Security,Mongodb,在我将电子邮件插入数据库之前->我用 if (filter_var($emailAdress, FILTER_VALIDATE_EMAIL)) { .... } 。。但这可能是一个安全漏洞吗 $userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') )); 我能这样做吗?还是没有必要 $emailAdr

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

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);
是在PHP中创建电子邮件地址的好方法,但是,它确实使用正则表达式,但到目前为止,这些已被证明是最好的

$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));
唯一真正的问题是
,这是一个特殊的字符,它会影响正则表达式的工作方式,但是您真的需要在这里执行正则表达式吗?您已经检查了它是一个完整的电子邮件地址,因此您只需要检查该确切的电子邮件地址存在的位置(或者最好在该字段上创建一个唯一的索引)


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

我使用正则表达式修复用户输入。。例如->MYemailAdress@mail.com不匹配myemailadress@mail.com在数据库中。所以,当我更换了。带\.->一切都安全吗?是吗?@user2306309是的,但不是索引友好,不会使用索引。最好的办法是将字段标准化为所有小写,然后输入并将其标准化为小写,这是我的第一个想法。Emailadesses可以用小写形式存储,对吗。但是我该怎么处理用户名呢?例如名称:iAmPro。。。我不想把这个名字小写:/@user2306309大多数sties,包括这一个存储两个用户名,一个显示,一个正常化,我建议这样做好吧,你说服了我;)。。。非常感谢你!
$userAccObj = $db->user->findOne( array('email' => array('$regex' => '^'.$emailAdress.'$', '$options' => 'i') ));