4

我们使用的 Web 应用程序框架内置了对处理跨站点请求伪造的支持。当数据通过浏览器发布到我们的网络服务器时,这很有效。

目前我们正在开发一个 API,其中上传的 XML 文件由相同的应用程序框架处理。我们的 API 需要在上传的 XML 文件中使用唯一令牌进行身份验证。由于默认启用 CSRF 检测并且 XML 文件不包含 CSRF 令牌,我们目前无法通过此 API 上传任何数据。

但是,我们可以很容易地禁用 CSRF 检测,但这安全吗?

这里的一篇文章非常大胆地陈述了以下内容。

It is safe to remove csrf for API calls as the particular vulnerability can only be executed through a web browser.

这是真的?不能通过 API 发生类似于CSRF 攻击的事情吗?

4

2 回答 2

2

这取决于您如何使用 API。假设使用 API 的网站容易受到 CSRF 的攻击,这意味着 API 也容易受到攻击。

维基百科说

CSRF 利用站点对用户浏览器的信任。

为了支持 API 调用,服务器要求凭据与每个请求(或类似摘要、安全句柄、散列)一起发送。如果凭据存储在应用程序内存(如移动应用程序)中,则 API 不会受到 CSRF 的攻击。但是,如果凭据保存在会话或 cookie 中,则 API 会暴露给 CSRF

于 2013-05-01T13:19:19.067 回答
0

这取决于“禁用 CSRF 检测”的含义。

一些指示:

  • 只要您确实验证了唯一的身份验证令牌,那么攻击者就无法在没有有效令牌的情况下欺骗有效请求。这很简单。

  • 这里的“唯一身份验证令牌”是指浏览器不会自动发送的东西。(所以不要使用HTTP Basic / DigestCookieheader 等东西。)它必须是你(API 创建者)想出的独特的东西。这可以像附加Foobar:the_unique_token标题一样简单。

  • 请注意,根据Cookie(或浏览器自动发送的其他令牌)来识别客户端是完全可以的,但您必须仅在提供唯一令牌时才允许进入。

只要攻击者能够猜测/获取令牌(the_unique_token),就可以欺骗有效请求。因此,令牌需要长、随机且一次性使用才能安全。

于 2014-06-06T19:23:43.297 回答