跨站点请求伪造是否可以对抗无状态RESTful服务?
我不是在谈论伪REST,服务器会记住你是通过cookie登录的.我说的是没有cookie的纯无应用程序状态的服务器REST.
我正在使用SSL和基本身份验证.对于每个请求,该Authorization标头必须在那里.尽管在SSL级别存在某种会话,但JSP意义上没有"会话".
因此,我们假设我正在查看发出Ajax请求的合法网页,并且我会以某种方式转到同一选项卡或不同选项卡中的不同页面,并且该页面发出相同的Ajax请求.(我假设合法网页上没有恶意代码;这完全是另一回事,在这种情况下一切皆有可能.)
当第二个页面发出Ajax请求时,浏览器是否会放置相同的Authorization标头?也就是说,浏览器会说"哦,你想再去那里?嘿,我碰巧还有钥匙!"?
此外,恶意脚本无法执行xhr请求,然后在回调中从ioargs获取请求,获取Authorization标头并取消Base64的名称和密码?
免责声明:我不是安全专家。
使用HTTP基本身份验证不会阻止通过GET请求进行CSRF攻击。例如,其他人可以在其HTML页面中包含一个img标记,该标记对某些知名URI进行GET,您的浏览器将很高兴发送基本的身份验证信息。如果GET操作是“安全的”(这是声称是RESTful的任何事物的#1规则),那么这将不会造成问题(超出浪费的带宽)。
由于同源策略,Ajax没问题。
仅在您生成的HTML中包含服务器生成的令牌,并验证其在表单提交请求中的存在,才能保护您免受其他人的干扰,只需在其页面中包含“外国”表单即可。您可以将其限制为浏览器生成的内容类型。对于XHR请求,无需这样做。