regex - 带有正则表达式的 MongoDB findOne(安全漏洞?)

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

最佳答案

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/

相关文章:

java - Java Web 应用程序中 session cookie 上的安全标志

mongodb - 为什么 Drill join 查询没有完全针对 Mongodb 进行优化?

javascript - 从数组的数组中的对象获取值

java - 有没有办法缩短包含一堆 boolean 比较的条件?

javascript - 当字符串位于注释中时,如何改进此正则表达式以使其不匹配

security - 为什么将 CSRF 预防 token 放在 cookie 中很常见?

node.js - 当嵌套数组为空时,$lookup 和 $unwind 不会给出结果

Java 正则表达式转义撇号

c# - 正则表达式匹配 C# 中的路径

Java 堆栈自省(introspection)