csrf 攻击一般是如何防御的?
https://tech.meituan.com/2018/09/27/fe-security.html
CSRF 攻击的原理是浏览器在访问网站时,会自动携带对应网站的 Cookies,这样就不需要读取你的 Cookies 照样可以用你的身份发起一些非你意愿的请求。
CSRF 防护原理是在 Cookies 里增加一个随机字符串,在请求时,表单或请求头中必须携带这个随机串。以此保证发起请求的一方是能够读取你 Cookies 的客户端。
而如果你在访问 evil.website 时,evil.website 的拥有者攻击你。
<script> $.ajax(“https:////v2ex.com/thank/topic/…”) </script>
就算根本不是同一个网站,但却可以在请求的时候让它自动带上 cookie,这就是 CSRF 。
所以有个 once 值,只有知道最新的 once 值才能发送感谢。
这两个可能混淆的一点就是把 XSS 作中间跳板
通过一个网站的 XSS 漏洞实现对另一个网站的 CSRF 攻击
[本站] 和 [外站] 一个主要区别是 本站(的脚本)能读本域的 cookie 。
XSS 漏洞的产生主要来源于偷懒,并不是本质易受攻击(和 CSRF 不一样)
和 eval 问题相似,你是完全可以写一个彻底安全的 sandbox eval 的,只要重新写一套词法分析器、语法分析器、解释器,然后把恰当的接口暴露给该环境就行。但是 eval 放那儿,图方便就直接调用了,就产生了漏洞。
HTML/DOM 同理,div.innerHTML = user_input_string 只是一个 HTML/DOM 下的 eval 罢了。
其次就是疏忽。
凡称“框架”必能解决这两个问题,在框架内办事,就出不了格。
如果攻击者能执行另一个网站的自定义代码,那攻击者就无所不能了,因为他可以完整模拟受害者的身份了。CSRF 防御手段根本识别不出