Content-Type: application/x-www-form-urlencoded Referer: https://redacted Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: ... query=%7B%0A++user+%7B%0A++++firstName%0A++++__type...
- <html>
- <!-- CSRF PoC - generated by Burp Suite Professional -->
- <body>
- <script>history.pushState('', '', '/')</script>
- <form action="https://redacted/graphql" method="POST">
- <input type="hidden" name="query" value="https://www.sohu.com/a/{
- user {
- firstName
- __typename
- }
- }
- " />
- <input type="submit" value="https://www.sohu.com/a/Submit request" />
- </form>
- </body>
- </html>
防止GraphQL注入攻击
对于那些由LDAP、ORMs/SQL/NoSQL或XML等辅助解析器 , 来处理输入信息的应用而言 , 我们建议开发人员做到如下方面:
- 选择诸如参数化语句等能够提供安全API的库 。
- 根据所选用的解析器的最佳实践 , 对输入进行转义或编码 。
- 遵循所选模块的文档 , 以正确的方式使用该工具 。 毕竟 , 大多数语言和框架都内置了编码/转义功能 , 因此了解它们的核心功能 , 并选择适合的用例是非常重要的 。
DoS攻击旨在使得GraphQL API变慢、甚至无法响应正常的请求 。 为了防御此类攻击 , 我们应做到:
- 为传入的GraphQL查询实施深度的规则限制(depth limiting) 。
- 为基础设施和API层添加超时设定 。
- 执行查询的成本分析 , 以限制代价昂贵的查询 。
- 对每个API客户端的传入请求 , 实施速率限制 。
为了保护对GraphQL API的合理访问 , 开发人员应该做到:
- 验证当前用户是否有权根据他们的请求 , 查看、改变、以及修改数据 。
- 对端点和边缘实施授权控制 。
- 利用基于角色的访问控制(RBAC)中间件 , 通过查询和变异解析器(mutation solver) , 来启用访问控制 。
- 在公共的API中禁用自省查询 。
- 禁用GraphiQL之类针对GraphQL模式的探查工具 。
开发人员还可以用来保护GraphQL层的其他方法包括:
- 对允许的字符使用白名单 。
- 为突变的输入预先定义好对应的GraphQL模式 。
- 使用单一的内部字符编码格式 , 来正确地处理Unicode输入 。
- 添加分页(pagination) , 以限制单个请求能够一次性访问到的信息量 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
