如果我什至不使用 cookie,CSRF 是否可行?

信息安全 csrf 休息 阿贾克斯
2021-08-13 11:19:46

我有使用访问令牌的 REST api,该令牌在标头或作为 url 查询中发送。我根本不使用cookies。

我仍然容易受到 CSRF 攻击吗?我知道我会使用 cookie,因为其他选项卡可以发送请求并且 cookie 也会发送,但在我的情况下,根本不会发送 Headers/UrlParam。

4个回答

,在那种情况下,你并不容易受到攻击。

原因正如您所解释的那样 - 第三方站点可能会向您的站点生成请求,但不会附加身份验证详细信息。

如果您使用 HTTP Basic 或 HTTP Digest 身份验证,CSRF 仍然是可能的。

这样做的原因是浏览器“本机”实现这些协议,这意味着如果浏览器知道凭据,浏览器将自动插入域的 HTTP Basic/Digest 凭据。

如果您使用其他形式的身份验证而不使用 cookie,那么 CSRF 是不可能的。

从您的问题来看,尚不清楚您是否脆弱。令牌是固定的还是加密强的随机生成令牌?如果它是固定的,它是没有价值的。

你在使用 SSL 吗?如果不是,您的令牌可能会被嗅探和窃取 - 强烈建议您使用 SSL。

另请注意,不建议在 url 中传递令牌。URL 是敏感的,因为它们需要在许多地方登录,例如浏览器历史记录、网络设备等... https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Disclosure_of_Token_in_URL

您如何在服务器端验证令牌是否有效?你把它保存在服务器会话中吗?通常 REST API 被设计为无状态的——这意味着不应保留任何会话。如果您想遵守此规则,您应该在仅 http 的 cookie 中创建令牌,并在每次 API 调用时将 cookie 值作为请求的一部分发送。然后,您的 API 应检查 cookie 值是否与请求中的令牌相同。攻击者无法读取 cookie,因此无法在请求中发送正确的令牌。

这是一个很好的博客:http: //blog.codinghorror.com/preventing-csrf-and-xsrf-attacks/

这似乎是防止 CSRF 攻击的正确方法。虽然,您可能希望在每个请求上生成一个新令牌并使之前使用的令牌无效。