什么是CORS?
2018-07-19 本文已影响0人
中华小强仔
CORS
什么是CORS?
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出
XMLHttpRequest
请求,从而克服了AJAX只能同源使用的限制。
学习资料
[跨域资源共享 CORS 详解] http://www.ruanyifeng.com/blog/2016/04/cors.html
CORS和CSRF区别
什么是CSRF
CSRF 主流防御方式是在后端生成表单的时候生成一串随机 token ,内置到表单里成为一个字段,同时,将此串 token 置入 session 中。每次表单提交到后端时都会检查这两个值是否一致,以此来判断此次表单提交是否是可信的。提交过一次之后,如果这个页面没有生成 CSRF token ,那么 token 将会被清空,如果有新的需求,那么 token 会被更新。
攻击者可以伪造 POST 表单提交,但是他没有后端生成的内置于表单的 token,session 中有没有 token 都无济于事。
既然已经有了同源策略,CSRF防护是否必要?
我之前错误的理解是「form 和 Ajax 发起的 POST 请求都受到 CORS 的限制,因此只要非幂等请求不是 GET, 就可以防范 CSRF」,而我今天才发现,原来 form 发起的 POST 请求并不受到 CORS 的限制,因此可以任意地使用其他域的 Cookie 向其他域发送 POST 请求,形成 CSRF 攻击。