请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请老师指正

请问老师关于csrf这样理解正确吗。

正常情况下csrf攻击是无效的,当配置xhr.withCredentials支持跨域情况携带cookie,然后SameSite也支持的情况下这个时候跨域请求就存在隐患。

当攻击者使用伪造请求发送时,它其实是无法拿到具体的cookie以及操作cookie,只能伪造请求携带请求域下的cookie进行伪造用户行为。

但是当我们使用token,也就是每次请求服务端会返回一个token的值放在cookie中,然后因为同源策略用户在当前同源域名下是可以操作当前cookie(只不过这一步被封装到了axios中)。通过js获取当前cookie,然后解析cookie拿出token,发送请求的时候额外添加一个验证的请求头value为解析后的token。

此时因为第三方攻击者只能模拟请求虽然跨域存在伪造请求的隐患但是因为同源限制,所有跨域请求均无法拿到token和操作token(它只是伪造请求中携带cookie)。

所以我理解区别就是,用户自己发送的请求额外添加了一个header,它的值是从cookie中解析出来的。而第三方伪造者(通过跨域操作伪造发送自己的请求),只能携带自己的请求头和截取到的cookie(无法进行任何操作)。因为缺少了解析cookie额外添加的请求头所以就会导致攻击失效。


请老师帮忙看下这样的理解是否是正确,如果理解不太对的还希望老师指正


正在回答

1回答

ustbhuangyi 2020-11-22 00:32:18

CSRF 防护的核心还是在于这个 token 是每次你访问页面由后端下发给前端的,它是动态的,攻击者没法拿到这个 token,它通过 cookie 上传也行,通过 Query 参数也行,放在 Http Headers 中也可以。

0 回复 有任何疑惑可以回复我~
  • 提问者 hy_wang #1
    老师我还是有一点疑惑,如果原封不动的放在了cookie中。虽然是每次都会变化,比如用户最后一次请求以后服务端生成了token返回放在cookie中,此时访问不安全网站。不安全网站伪造了请求,此时的cookie应该也是最新的吧,而且这样的话全在cookie中是不是也就伪造成功了
    回复 有任何疑惑可以回复我~ 2020-11-22 00:38:43
  • ustbhuangyi 回复 提问者 hy_wang #2
    首先你这个场景会十分苛刻,必须是先访问正常站点,然后在一个很短时间内访问攻击站点,另外我完全可以不把它放到 cookie 里,通过其它几种方式,这样攻击者就完全拿不到
    回复 有任何疑惑可以回复我~ 2020-11-22 00:45:11
  • 提问者 hy_wang #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-11-22 00:46:10
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信