有很多文章,教程甚至模块可以通过检查查询的深度,成本或对GraphQL服务器的高比率连续请求(DoS攻击)进行速率限制来限制恶意递归查询。
但是,我找不到能够保护GraphQL服务器不受“宽”查询的任何东西,该查询只是在同一请求中拉出太多字段实例,即:
query MaliciousQuery {
alias1: fieldName { subfileld1 subfiled2 ...}
alias2: fieldName { subfileld1 subfiled2 ...}
...
alias10: fieldName { subfileld1 subfiled2 ...}
...
alias100: fieldName { subfileld1 subfiled2 ...}
...
alias1000: fieldName { subfileld1 subfiled2 ...}
...
}
是的,GraphQL允许客户询问他们的需求,但是在某些情况下,我们可能希望限制特定类型的对象数量,特别是在获取此类对象的成本很高的情况下。我应该提到在我的用例中不希望使用分页。
当然,一种方法是限制查询字符串的总长度,但这是完成此操作的粗略方法,并且对于甚至不涉及实际昂贵对象的复杂查询请求,也会产生意想不到的副作用。成本分析也可以使用,但是对于这种简单的东西来说似乎已经过头了,而且还会带来其他复杂性。
如果我们可以在架构上有一个限制指令来指定类似的东西,那将是很好的
@perRequestLimit(count: 5)
因此,客户在一次查询中最多只能请求5个这些昂贵的对象。
有人知道这样的模块吗?还是有其他方法可以实现这种限制?