这是 WP GraphQL (wordpress) 的安全问题吗?

问题描述

使用邮递员查询

query MyQuery {
  users {
    nodes {
        id
        email
    }
  }

使用经过身份验证的请求(和管理员权限),我得到:

{
    "data": {
        "users": {
            "nodes": [
                {
                    "id": "dXNlcjox","email": "..."
                },{
                    "id": "dXNlcjoz","email": ".........."
                },{
                    "id": "dXNlcjoy","email": "................."
                }
            ]
        }
    },"extensions": {
        "debug": []
    }
}

返回所有用户,没关系

但是!!!

我收到一个公开请求:

{
    "data": {
        "users": {
            "nodes": [
                {
                    "id": "dXNlcjox","email": null
                }
            ]
        }
    },"extensions": {
        "debug": []
    }
}

为什么节点有:"id": "dXNlcjox" 暴露给公共请求?

这是安全问题吗?

解决方法

其实这样还行。

引自 WP GraphQL 页面:

WPGraphQL 遵循 WordPress 访问控制权限,并且只公开公开 WordPress 已经公开的数据。已发布帖子的用户被视为 WordPress 中的公共实体。未发布帖子的用户被视为私人用户,不会包含在公共 GraphQL 请求中,但会包含在经过身份验证且具有查看用户权限的用户发出的 GraphQL 请求中。

用户电子邮件地址等字段也受 WPGraphQL 保护,并且仅向具有查看数据的适当能力的用户的经过身份验证的请求公开。

这个特定的节点:"id": "dXNlcjox" 恰好是管理员,对于 wordpress 来说,他的存在是一个公开信息(即使他的电子邮件不是)。