Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSRF能在API中发生吗?_Api_Csrf - Fatal编程技术网

CSRF能在API中发生吗?

CSRF能在API中发生吗?,api,csrf,Api,Csrf,我们使用的web应用程序框架具有处理跨站点请求伪造的内置支持。当使用浏览器将数据发布到我们的Web服务器时,这种方法非常有效 目前,我们正在开发一个API,其中上载的XML文件由相同的应用程序框架处理。我们的API要求上传的XML文件中有一个唯一的令牌进行身份验证。由于默认情况下启用了CSRF检测,并且XML文件不包含CSRF令牌,因此我们目前无法通过此API上载任何数据 然而,我们可以很容易地禁用CSRF检测,但这安全吗 一篇博文相当大胆地陈述了以下内容 It is safe to remov

我们使用的web应用程序框架具有处理跨站点请求伪造的内置支持。当使用浏览器将数据发布到我们的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.

这是真的吗?与CSRF攻击类似的东西不能通过API发生吗?

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

Wekipedia说

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


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

一些建议:

  • 只要您不失败地验证唯一身份验证令牌,那么攻击者就无法在没有有效令牌的情况下伪造有效请求。这很简单

  • 这里的“唯一身份验证令牌”指的是浏览器不会自动发送的东西。(所以不要使用像,
    Cookie
    header等等)它必须是你(API创建者)想出的独特的。这可以像添加一个
    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有一个无状态约束,不允许我们在服务器上存储客户端会话。所以我认为你也需要写一些关于这方面的东西。