GraphQL 和 CSRF 保护

Posted

技术标签:

【中文标题】GraphQL 和 CSRF 保护【英文标题】:GraphQL and CSRF protection 【发布时间】:2019-02-03 06:13:26 【问题描述】:

我读了很多:

    https://github.com/pillarjs/understanding-csrf https://security.stackexchange.com/questions/10227/csrf-with-json-post Are JSON web services vulnerable to CSRF attacks? (ApolloServer 网站上没有任何内容:https://www.apollographql.com/docs/apollo-server/)

但是,我还不能理解我们的端点(“/graphql”)是否受到此类攻击的保护,或者是否有必要使用以下解决方案来保护它:https://github.com/expressjs/csurf。

我不清楚的是这里:https://github.com/pillarjs/understanding-csrf 他们说:

当您错误地使用 CSRF 令牌时: ... 将它们添加到 JSON AJAX 调用 如上所述,如果您不支持 CORS 并且您的 API 是严格的 JSON,那么将 CSRF 令牌添加到您的 AJAX 调用中绝对没有意义。

如果我们将端点限制为只使用Content-Type: application/json,我们安全吗?

【问题讨论】:

【参考方案1】:

如果我们限制我们的端点只使用 Content-Type: application/json 我们安全吗?

JSON 不能免受 CSRF 攻击(但需要为攻击者做一些额外的工作),而且如果没有正确配置,GraphQL 也不会。如果您将其分解为请求/响应,则 CSRF 的通常场景将适用于此处:

    受害者使用您的 GraphQL Web 服务进行身份验证。 攻击者向受害者发送恶意链接。 受害者点击链接并访问攻击者的恶意网站。 攻击者的网站使用受害者 cookie 发送 JSON 请求。 Web 服务接收带有有效会话令牌/cookie 的 JSON 请求,并且受害者在不知情的情况下运行功能。

在这种情况下,您的服务容易受到 CSRF 的攻击。确保将 CORS 配置为仅允许来自受信任域白名单的请求,并确保 CSRF 令牌正在使用中。实施多重保护将降低成功攻击的风险。

以下链接更详细,您甚至可以自己尝试: https://blog.appsecco.com/exploiting-csrf-on-json-endpoints-with-flash-and-redirects-681d4ad6b31b

这个答案也很相关: Are JSON web services vulnerable to CSRF attacks?

【讨论】:

以上是关于GraphQL 和 CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL查询语言中的CSRF漏洞

使用 express js、passport s 保护 GraphQL 查询

使用受保护的 GraphQL 端点进行用户注册

如何对 graphql 解析器实施保护

不允许使用 JWT 令牌保护 GraphQL 端点

使用护照 + JWT 或会话保护 GraphQL API? (举例)