PHP8 MongoDB请求注入攻击
如果您通过(或 ) 参数,请确保它们首先被强制转换为字符串。 用户可以在 GET 和 POST 请求中插入关联数组,这可以 然后成为不需要的 $ 查询。$_GET$_POST
一个相当无害的例子:假设您正在查找用户的信息 请求 http://www.example.com?username=bob。 您的应用程序将创建查询。$q = new \MongoDB\Driver\Query( [ 'username' => $_GET['username'] ])
有人可以通过获取 http://www.example.com?username[$ne]=foo(其中 PHP)来颠覆这一点 会神奇地变成一个关联数组,把你的查询变成 , 这将返回所有未命名为“foo”的用户(可能是您的所有用户)。$q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] )
这是一个相当容易防御的攻击:确保 _GET 美元和 _POST 美元 参数是将参数发送到数据库之前所需的类型。 PHP 有 filter_var() 函数来协助解决这个问题。
请注意,这种类型的攻击可以与任何数据库交互一起使用 查找文档,包括更新、更新插入、删除和 findAndModify 命令。
有关MongoDB的类似SQL注入的问题的更多信息,请参阅主要文档。