CSRF能在API中发生吗?
我们使用的web应用程序框架具有处理跨站点请求伪造的内置支持。当使用浏览器将数据发布到我们的Web服务器时,这种方法非常有效 目前,我们正在开发一个API,其中上载的XML文件由相同的应用程序框架处理。我们的API要求上传的XML文件中有一个唯一的令牌进行身份验证。由于默认情况下启用了CSRF检测,并且XML文件不包含CSRF令牌,因此我们目前无法通过此API上载任何数据 然而,我们可以很容易地禁用CSRF检测,但这安全吗 一篇博文相当大胆地陈述了以下内容CSRF能在API中发生吗?,api,csrf,Api,Csrf,我们使用的web应用程序框架具有处理跨站点请求伪造的内置支持。当使用浏览器将数据发布到我们的Web服务器时,这种方法非常有效 目前,我们正在开发一个API,其中上载的XML文件由相同的应用程序框架处理。我们的API要求上传的XML文件中有一个唯一的令牌进行身份验证。由于默认情况下启用了CSRF检测,并且XML文件不包含CSRF令牌,因此我们目前无法通过此API上载任何数据 然而,我们可以很容易地禁用CSRF检测,但这安全吗 一篇博文相当大胆地陈述了以下内容 It is safe to remov
It is safe to remove csrf for API calls as the particular vulnerability can only be executed through a web browser.
这是真的吗?与CSRF攻击类似的东西不能通过API发生吗?这取决于您如何使用API。假设使用API的网站易受CSRF攻击,这意味着API也易受攻击 Wekipedia说 CSRF利用网站对用户浏览器的信任
为了支持API调用,服务器要求将凭据与每个请求一起发送(或一些类似的请求,如摘要、安全句柄、散列)。如果凭据存储在应用程序内存中(如移动应用程序),则API不会受到CSRF的攻击。但是,如果凭据保存在会话或cookie中,则API将暴露于CSRF,这取决于“禁用CSRF检测”的含义 一些建议:
- 只要您不失败地验证唯一身份验证令牌,那么攻击者就无法在没有有效令牌的情况下伪造有效请求。这很简单
- 这里的“唯一身份验证令牌”指的是浏览器不会自动发送的东西。(所以不要使用像,
header等等)它必须是你(API创建者)想出的独特的。这可以像添加一个Cookie
头一样简单Foobar:the_unique_token
- 请注意,基于
(或浏览器自动发送的其他令牌)识别客户端是完全正确的,但您必须仅在提供唯一令牌时才允许输入Cookie
只要攻击者能够猜测/获取令牌(
唯一令牌
),就可以伪造有效请求。因此,令牌必须是长的、随机的和一次性的,才能确保安全。简而言之:如果您使用会话、cookie或http身份验证,则必须保持CSRF保护@kranthi117,请详细说明如果凭据存储在cookie中,它如何容易受到CSRF的攻击。由于CSRF攻击者无法读取cookie,他如何能够伪造包含cookie值的请求?@Pacerier我猜他的意思是,凭据以cookie头的形式发送到API,因此它们由浏览器而不是客户端应用程序自动附加到每个请求中…@inf3rno,Cookie被发送到服务器,而不是攻击者。由于CSRF攻击者无法读取cookie,他如何能够伪造包含cookie值的请求?@Pacerier我不理解这个问题。CSRF是向您登录的易受攻击的应用程序发送请求。因此,攻击者在另一个站点上向您发送表单,您单击post,浏览器将表单发送到有漏洞的应用程序,并附加您的会话cookie。据我所知,只有当Javascript应用程序使用历史api生成请求时,才会受到CSRF的攻击。您的解决方案在CSRF方面还可以,但REST有一个无状态约束,不允许我们在服务器上存储客户端会话。所以我认为你也需要写一些关于这方面的东西。