每个人如何跨关系进行身份验证以防止数据通过关系被遍历?
例如,我们有一个拥有用户的商店。
// Returns error as i've set custom resolver to allow only context.user.is_shop_owner
{
shops {
name
users {
email
...
}
}
}
此查询通常被自定义解析器(如)阻止context.user.is_shop_owner
,因此您无法从根查询执行此操作。
但是,如果一个恶意的人遍历关系到达用户对象,他就能够获取敏感的用户数据。
// Data exposed un-intendedly due to relation traversal. How to prevent this?
{
products {
name
price
shop {
users { ... } // boom, exposed
}
}
}
这是graphql的缺陷吗?你们是如何解决这个问题的?
顺便说一句,这是在 python-graphene 堆栈上。
编辑:顺便说一句,我知道我们可以做到exclude_fields
,但是我将无法从 ShopNode 访问用户,这是查询 ShopNode 的重要信息,因此限制字段可能不是一个好主意。(已编辑)