CORS机制中ACAO和ACAC
最近在写CSRF的总结,应大老板的要求,Ajax部分要用CORS来写……然而我又不会,只能硬着头皮,一眼书,一眼谷歌地去学。在这个过程中ACAO和ACAC之间的关系,以及设置效果困扰了我很长时间,随后用了很长时间去请教大佬们才搞懂,所以今天在这个新博客将这部分介绍一下,希望其他人可以跳过这个坑……
首先简单介绍一下相关的名词:
Ajax(Asynchronous JavaScript And XML):异步请求,虽然是JS and XML 不过最近好像JSON成主流了(我也不太清楚),相当于单独开启了一个线程,独立于浏览器主线程去做自己的事儿,异步在后台悄悄进行,所以AJAX的攻击就显得很隐蔽,很合猥琐流的胃口,嘿嘿嘿~
其实Ajax是严格遵循同源策略的,但是设计者为了方便进行跨域之间的资源请求,设计了CORS这个机制,在提高网站可用性的同时,也给攻击创造了机会。
CORS(Cross-Origin-Resource Sharing):即“跨域资源共享”,它允许浏览器向跨源服务器,发出XMLHttpRequest
请求,从而克服了AJAX只能同源使用的限制。
关于CORS可以看
懒癌发作……懒得写ACAC和ACAO的介绍了,请各位看官浏览以上链接了解。
在余弦的《前端黑客》中写道,ACAC为true时,ACAO就不能设置为*。第一遍看的时候,还以为服务器端这样写会报错……后面才发现,这是浏览器这边定义的安全规则,即当这样设置的时候,浏览器就不会正常接收服务器端返回的数据包;
个人感觉,刚开始接触CORS机制中的这两个东西的时候,很容易误把它们当做是防御CSRF的措施,但实际情况下,CORS机制根本防不了CSRF;
演示的话,大家可以看一下:
CSRF & CORS
和
简单聊一聊 CSRF 与 CORS 的关系
这里演示的已经比较详细了,如果想要自己测试一下的话,可以在本地试一试,代码可以参考链接里的,或者《前端黑客》里的;
其实以上的链接,以及今天写这篇文章,只是想阐明一点:
CORS的安全机制,只能影响浏览器是否正常接受服务器返回包;无论ACAC是否为true,ACAO是否为*,你的请求,都会被服务端执行;所以这些安全机制对于防范CSRF漏洞,没用!没用!没用!
好,废话说完了,下次见~