MongoDB findOne与正则表达式(安全漏洞?)

时间:2013-07-18 15:40:21

标签: regex security mongodb

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

验证地址
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);

1 个答案:

答案 0 :(得分:1)

if (filter_var($emailAdress, FILTER_VALIDATE_EMAIL))

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

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

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

我认为你可以拿出正则表达式并完全匹配。