面试题答案
一键面试安全隐患
- 注入攻击:类似于SQL注入,恶意用户可能通过操纵聚合管道表达式,插入恶意代码,例如修改查询逻辑、获取敏感数据等。例如在使用
$match
阶段时,恶意用户构造特殊的查询条件来绕过权限控制。 - 权限滥用:如果聚合操作的权限配置不当,拥有聚合权限的用户可能会利用聚合管道执行超出预期的操作,比如获取不应访问的数据。例如具有特定集合聚合权限的用户,通过聚合操作获取到整个数据库的敏感信息。
- 性能损耗攻击:恶意用户故意构造复杂、低效的聚合管道,消耗大量的服务器资源,导致数据库性能下降甚至服务不可用。例如使用大量嵌套的
$lookup
操作或者不合理的$group
操作,使服务器CPU和内存资源耗尽。
应对措施
- 输入验证:对传入聚合管道的参数进行严格的验证和过滤,确保输入的数据符合预期格式和范围。可以使用正则表达式等方式验证输入值,防止恶意表达式注入。例如验证
$match
阶段的查询条件是否符合特定格式。 - 权限管理:精细配置用户权限,遵循最小权限原则。只授予用户执行必要聚合操作所需的最低权限。例如对于普通用户,只给予特定集合特定字段的聚合查询权限,而不是整个数据库的聚合权限。定期审查和更新用户权限,确保权限分配合理。
- 资源限制:在服务器层面设置资源限制,例如限制单个聚合操作的执行时间、内存使用量等。MongoDB自身支持设置内存限制参数,如
$maxMemoryUsageMB
,可以防止因恶意聚合操作导致资源耗尽。同时,可以通过监控工具实时监测聚合操作的资源使用情况,对异常操作及时进行处理。