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 保护的主要内容,如果未能解决你的问题,请参考以下文章