Everyone说CORS没有采取任何措施来抵御CSRF攻击。这是因为CORS阻止域外访问(读取)域上的资源 - 但不会阻止处理请求。所以邪恶的网站可以发送状态改变的DELETE请求,而不关心它们无法读回结果。
这一切都很好。
在这种情况下,CORS会在发送请求之前查看请求,并检查它是否合法。如果不是,则拒绝该请求。
因此,CSRF攻击者尝试发送的DELETE请求未通过飞行前检查,因此被拒绝。 CSRF攻击失败。
我在这里缺少什么?
答案 0 :(得分:0)
飞行前请求一般不会阻止CSRF 。例如,并非所有跨域ajax调用都会生成飞行前请求,而普通POST则不会。可能存在特定情况,但飞行前请求确实有助于降低风险。
另一个问题与检查referer / origin相同。虽然攻击者无法在恶意网站上覆盖普通Javascript中的引用者或来源,但使用合适的浏览器插件(例如旧版本的Flash)可能会这样做。如果浏览器插件允许这样做,攻击者可能能够在没有预飞行的情况下发送跨源请求。因此,您不希望仅依赖于飞行前请求。