为什么不在飞行前CORS阻止CSRF攻击?

时间:2016-12-14 17:07:35

标签: web-services security web csrf csrf-protection

Everyone说CORS没有采取任何措施来抵御CSRF攻击。这是因为CORS阻止域外访问(读取)域上的资源 - 但不会阻止处理请求。所以邪恶的网站可以发送状态改变的DELETE请求,而不关心它们无法读回结果。

这一切都很好。

pre-flight CORS除外。

在这种情况下,CORS会在发送请求之前查看请求,并检查它是否合法。如果不是,则拒绝该请求。

因此,CSRF攻击者尝试发送的DELETE请求未通过飞行前检查,因此被拒绝。 CSRF攻击失败。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

飞行前请求一般不会阻止CSRF 。例如,并非所有跨域ajax调用都会生成飞行前请求,而普通POST则不会。可能存在特定情况,但飞行前请求确实有助于降低风险。

另一个问题与检查referer / origin相同。虽然攻击者无法在恶意网站上覆盖普通Javascript中的引用者或来源,但使用合适的浏览器插件(例如旧版本的Flash)可能会这样做。如果浏览器插件允许这样做,攻击者可能能够在没有预飞行的情况下发送跨源请求。因此,您不希望仅依赖于飞行前请求。