2

我对这个问题有一个确切的情况:将 csrf 保护与 RESTful API 结合起来有哪些可行的技术?

给出的一个答案是关于使用

  • 使用 SSL 的基本身份验证
  • 每个应用程序 1 个 API 密钥
  • 身份验证

我已经确信实施 OAuth2.0,您将拥有每个应用程序的 access_token、client_id、client_secret。

但是,我不知道这实际上有助于防止 CSRF。

我的观点是,归根结底,您仍然需要 ssl。

因为在 OAuth2.0 中,当客户端应用程序代表资源所有者发送请求时,它们需要与数据参数一起发送,例如 client_id、client_secret 和 access token。

如果没有 HTTPS,如果 client_id、client_secret 和 access token 是通过泄漏或中间人知道的,那么仍然存在 CSRF 的机会,尽管由于 access token 的到期期限而很小。

我的理解正确吗?

4

1 回答 1

2

如果资源仅受 OAuth 2 保护,并且攻击者获得了 client_id、client_secret 和访问令牌,则根本不需要 CSRF。攻击者可以直接发送请求以使用受保护的资源并将被服务,因为 OAuth 2 不过滤请求的来源,它只需要一个访问令牌。

通常,您绝对应该对身份验证服务器和受保护资源都使用 HTTPS,以避免中间人攻击。但是,如果您使用“授权码授予”方案(即在您自己的 Web 应用程序中使用它),那么即使资源所有者也不知道访问令牌,他只能拦截授权码。因此,如果您的 Web 应用程序与授权服务器和受保护资源都有受信任的(例如 Intranet)连接,则可以安全地使用与受保护资源的未加密连接。

于 2012-06-13T11:05:58.167 回答