@
moon548834 #8
首先,我说以下一般实现,现在很多网站或者说产品,都没有专门设置 CSRF token 的,都不是通过这种手段来避免跨站攻击。
在你例子中,用户从钓鱼网站 B 触发的网站 C 的请求,携带了 Cookie 到目标服务器,但是服务器是不会认可`此次请求已被授权的`,因为不是从网站 C 页面上发起的,所以网站 C 的 JS 没有执行,没有讲 Cookie 中的 token 部分提取出来,放到 Header 中,并拼上`Bearer`之类的符号,所以这次请求,就和用户第一次访问网站 C 一样,是安全的。
这其中关键在于,网站 C 服务端,不认可从其他网页发起的 http 请求,只认可自己页面的,所以借助 Ouath2.0 令牌模式的机制,避免了 CSRF 。
当然你自定义任何方式都可以,只要类似我#6 的说法。
PS1: 理论上令牌可以放到任何位置,但是一般放到 localStorage 里,因为浏览器请求在没有 JS 处理的情况下,不会携带这些信息,有一定安全性。
PS2: 我说的只是一种最简单的模型理论,实际上企业中,预防 CSRF 的手段特别多,因为用户信息和权限的校验步骤非常多,也非常复杂,不是那一种方式就能完成的,都是多种手段并用。
PS3:V 站用了 CSRF token ,并且这个 token 有实效,过期了,页面都直接时效了,可以参考。