我们使用的Web应用程序框架内置了对跨站点请求伪造的处理支持。当数据通过浏览器发布到我们的网络服务器时,这很有效。
目前,我们正在开发一个API,其中上传的XML文件由同一个应用程序框架处理。我们的API需要在上载的XML文件中使用唯一标记进行身份验证。由于默认情况下启用了CSRF检测,并且XML文件不包含CSRF令牌,因此我们目前无法通过此API上载任何数据。
但是,我们可以很容易地禁用CSRF检测,但这样安全吗?
here个帖子 - 非常大胆地说 - 以下内容。
It is safe to remove csrf for API calls as the particular vulnerability can only be executed through a web browser.
这是真的吗? CSRF攻击是否可以通过API发生类似?
答案 0 :(得分:2)
这取决于您如何使用API。假设使用API的网站容易受到CSRF的攻击,这意味着API也很脆弱。
Wekipedia说
CSRF利用网站对用户浏览器的信任。
为了支持API调用,服务器要求将凭据与每个请求一起发送(或者像摘要,安全句柄,哈希等等)。如果凭据存储在应用程序内存中(如移动应用程序),则API不易受CSRF攻击。但是,如果凭证保存在会话或cookie中,则API会暴露给CSRF
答案 1 :(得分:0)
这取决于您的意思"禁用CSRF检测"。
一些指示:
只要您 执行 验证唯一身份验证令牌,那么攻击者就无法在没有有效令牌的情况下欺骗有效请求。这很简单。
"唯一身份验证令牌"这里指的是浏览器不会自动发送的内容。 (所以不要使用HTTP Basic / Digest,Cookie
标题等内容。)您(API创建者)必须出现 unique 用。这可以像额外的Foobar:the_unique_token
标题一样简单。
请注意,根据Cookie
(或浏览器自动发送的其他令牌)识别客户端是完全正常的,但只有在提供唯一令牌时才允许输入。
只要攻击者可以猜测/获取令牌(the_unique_token
),就可以欺骗有效请求。因此,令牌需要长,随机,一次性使用才能保证安全。