GraphQL和CSRF保护

时间:2018-08-28 14:52:28

标签: security graphql csrf graphql-js csrf-protection

我读了很多东西:

  1. https://github.com/pillarjs/understanding-csrf
  2. https://security.stackexchange.com/questions/10227/csrf-with-json-post
  3. Are JSON web services vulnerable to CSRF attacks?
  4. (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 个答案:

答案 0 :(得分:3)

  

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

JSON无法抵抗CSRF攻击(但需要为攻击者做些额外的工作),并且通过扩展,如果配置不当,GraphQL也不会。如果将其细分为请求/响应,则CSRF的通常情况将在此处适用:

  1. 受害人通过您的GraphQL Web服务进行身份验证。
  2. 攻击者将恶意链接发送给受害者。
  3. 受害者单击链接并访问攻击者的恶意网站。
  4. 攻击者的网站使用受害者cookie发送JSON请求。
  5. 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?