小编Tri*_*owo的帖子

有人可以通过设置 x-hasura-role 来伪造对 Hasura GraphQL 引擎的请求吗?

如果我理解正确,要使用 JWT 在 hasura 中授权查询或突变,请求本身需要满足一些要求,即:

  1. JWT 本身,出现在请求头中
    Authorization: Bearer <token here>
  2. x-hasura-role,出现在请求头中(可选)
    x-hasura-role: user
  3. 请求正文中呈现的实际查询或变更
myQuery {
  id
  name
  another_field
}
Run Code Online (Sandbox Code Playgroud)

当请求被发送到 hasura 端点时,hasura GraphQL 引擎将尝试

  1. 验证 JWT
  2. 检查x-hasura-role请求头中设置的值是否存在于x-hasura-allowed-rolejwt的声明中
  3. 如果所有条件都满足,那么 GraphQL 引擎会检查从x-hasura-roleheader的值分配的角色是否有权限从请求体执行查询

据我了解,这意味着有人可以通过将 的值设置为 JWT 声明中x-hasura-role存在的其他内容来“伪造”对 hasura GraphQL 引擎的请求x-hasura-allowed-roles。例如,如果x-hasura-allowed-roles索赔是这样的

{
  ...
    'x-hasura-allowed-roles': ['role1','role2'],
    'x-hasura-default-role': 'role1',
    'x-hasura-user-id': username
  }
}
Run Code Online (Sandbox Code Playgroud)

那么这意味着应该只分配给角色 1 的人可以执行仅限于角色 2 的查询,只需x-hasura-role将请求中的标头设置为x-hasura-role: role2

我的理解正确吗?如果是,避免这种情况的最佳方法是什么,因为它似乎是一个安全漏洞?我是否只是x-hasura-allowed-roles将 jwt的声明限制为仅根据我的身份验证服务分配给每个用户的角色?

security hasura

3
推荐指数
1
解决办法
722
查看次数

标签 统计

hasura ×1

security ×1