查看Graphene提供的公共API,如果您天真地遵循所记录的示例,提供相对容易遭受拒绝服务攻击的API相对容易,即使它们不是故意的:
出于这个原因,我倾向于说,保护公共GraphQL API的最简单方法是在生产环境中使用查询白名单。如果查询不在白名单中,并且用户不是管理员,请拒绝查询。
因此,提出了一个问题:如何在Graphene中维护查询白名单并拒绝不在该白名单上的查询?一些想法:
因此,在不尝试深入研究猴子修补Graphene的情况下,我遇到了相同的问题:如何使用Graphene实现查询白名单? (或者,或者,如何保护生产的Graphene服务器免受过于昂贵的查询呢?)
每个查询一次的意思。查询字段很重要,如果您想将顶级字段列入白名单,则中间件非常适合。 Serving over HTTP中也间接建议这种做法-您将身份验证留给HTTP层(例如,使用JWT),将授权留给GraphQL中间件。这也是Graphene documentation中的用法示例之一。