gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:44:17 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com