在Doctrine ODM MongoDB查询过程中有没有绑定参数的方法?
$path = $this->objectManager->getRepository("MyBundle:MyDocument")
->findOneBy(array("slug" => new MongoRegex("/^slug/")))
;
这将不必在上面出现段塞的地方进行字符串连接。
简而言之,您通常不必担心与SQL注入相同类别的字符串注入问题,因为发送到MongoDB服务器的请求是对象格式(BSON),而不是像SQL这样的字符串格式。
典型的SQL注入攻击涉及操纵将连接到SQL查询字符串中的变量。SQL绑定参数是通过转义和/或类型检查来限制可接受值的变量的占位符。在BSON格式中,查询的方面以对象格式保存,该格式将值的范围限制在该字段。
如果您正在为服务器端JavaScript执行传递值,例如在$where
查询中,那么在过滤用户提供的输入时必须小心。服务器端JavaScript通常不受欢迎,因为它可能会对性能产生一些不利影响。
有关更多信息,请参阅MongoDB wiki页面"我必须担心SQL注入吗?"。当然,MongoDB中实际上不支持SQL,所以这个页面的名称应该更恰当地命名为"我应该担心参数注入攻击吗";-)。