V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shermie
V2EX  ›  程序员

不懂就问: csrf 攻击的疑问

  •  
  •   shermie · 2023-08-31 17:59:22 +08:00 · 2550 次点击
    这是一个创建于 456 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    首先,我是菜鸡,怀着学习的心态提问

    xss 攻击者可以利用脚本读取浏览器的 cookie 信息发送到自己的服务器,然后加以利用,这一过程都是在用户登录的网站完成的,可以理解。

    但是 csrf 攻击,是诱导已登录的用户点击钓鱼网站,这个过程已经不是同源的了,域名都不一样了,浏览器不会携带网站 A 的 cookie 信息到钓鱼网站 B ,那好像这也并不能构成信心泄漏,大佬解答一下

    19 条回复    2023-09-01 10:58:58 +08:00
    thinkershare
        1
    thinkershare  
       2023-08-31 18:20:20 +08:00
    我可以诱导你去访问我的网站,然后在我的网站发送一个请求你的网站的一个 GET&POST 请求,这个请求携带的是请求 URL 所在 origin 的 Cookie, 这个过程就是请求伪造。用户被欺骗用他自己的真实身份做了他不知道的事情。
    lrwlf
        2
    lrwlf  
       2023-08-31 18:59:59 +08:00
    钓鱼网站 B 可以直接跳转到 A 网站的某个接口地址,或者通过 iframe 加载 A 网站的接口,这样构造的 GET 请求可以携带 cookie
    SilentRhythm
        3
    SilentRhythm  
       2023-08-31 19:01:59 +08:00
    银行 A 网站,骗子 B 网站,浏览器有 A 网站的 cookie
    SilentRhythm
        4
    SilentRhythm  
       2023-08-31 19:02:09 +08:00
    SilentRhythm
        5
    SilentRhythm  
       2023-08-31 19:03:21 +08:00
    点错了,续上
    在 B 网站的页面上发起了对 A 网站的请求,如果 A 网站没有校验,是能通过的
    8355
        6
    8355  
       2023-08-31 19:18:55 +08:00
    是由钓鱼网站 B 带有恶意代码跳转回 A 网站的指定路径通过参数传递+浏览器自动获取本地 cookie 完成鉴权达成目的。
    wonderfulcxm
        7
    wonderfulcxm  
       2023-08-31 19:20:53 +08:00 via iPhone
    它最终目标 URL 还是 A ,比如从 B 提交一个表单到 A 的 URL ,如果没有限制,就会带上 A 的 cookie 。因为访问 A 网站就会带上 A 的 cookie 。
    wangxiaoaer
        8
    wangxiaoaer  
       2023-08-31 19:25:54 +08:00
    csrf 不是偷 cookie ,目标不是钓鱼网站,而是用户已经登陆的网站,用来偷偷模拟操作,这个操作可能很危险。
    GeruzoniAnsasu
        9
    GeruzoniAnsasu  
       2023-08-31 19:36:27 +08:00
    哪有那么抽象,早年微博和贴吧的漏洞见过没,点进一个不正常的「病毒帖」后你会自动地在所有已关注的贴吧里都发一份一样的病毒帖子。


    这个就是 CSRF. 只是伪造的用户行为是发帖。如果伪造上传下载文件或者修改什么私有资源的权限之类的行为,那破坏力能大得多。
    wudiiiii
        10
    wudiiiii  
       2023-08-31 19:55:35 +08:00
    关于浏览器安全,只要记着:
    1. 本网站存储的信息恶意网站不能读写。(同源策略)
    2. 恶意网站能够构造和发送任意参数的请求,而且 cookie 会自动携带。

    CORS 策略只限制了跨域请求不能接收响应,但是请求还是可以发出去。
    lybcyd
        11
    lybcyd  
       2023-08-31 20:23:20 +08:00
    例如 B 网站的一个伪造表单:
    <form action="http://www.a.com/deleteAccount" method="post></form>

    这个表单本身不违反同源策略,可以在用户不知道的情况下,通过用户已有的 cookie 进行一些很危险的操作。

    为了防止类似的提交,通常的做法就是加上一个额外的隐藏 token 并进行校验,伪造的表单是无法获取到隐藏 token 的。像 Spring Security 这种框架一般都默认实现了 csrf token 。
    xiaoxiaoming01
        12
    xiaoxiaoming01  
       2023-08-31 21:25:47 +08:00 via Android
    在站点 B 调用站点 A 的同源接口时,
    它默认不会带站点 B 的 cookie ,
    但是会带站点 A 的 cookie 。
    xiaoxiaoming01
        13
    xiaoxiaoming01  
       2023-08-31 21:35:11 +08:00 via Android
    假设有站点 C ,它使用的接口 d 与它不同源,
    那么在站点 C 调用 d 接口时默认不带 cookie ,

    如果你后来又部署了一个站点 D ,站点 D 与接口 d 同源,
    那么,此时在站点 C 调用接口 d 时,它会默认带 D 站点的 cookie 。
    mdn
        14
    mdn  
       2023-08-31 22:34:42 +08:00
    xss 是 盗用 用户 cookie
    csrf 是 冒用 用户 cookie
    xhr 和 fetch 不能随意跨站请求资源,需要通过 CORS 策略来支持其跨域,但是 页面中可以引用任意第三方资源,比如
    1. <img src="https://www.example.com/deleteAccount"> ,
    2. <form action="https://www.example.com/deleteAccount" method=POST>
       <input type="hidden" name="account" value="admin" />
       <input type="submit" value="抢红包" />
    </form>
    3. <a href="https://www.example.com/deleteAccount" taget="_blank">抢红包<a/>

    用户只要登录过 example.com 网站,在第三方网站触发上面任意一种,都会被恶意删除账号
    lalalaqwer
        15
    lalalaqwer  
       2023-08-31 23:06:53 +08:00
    @wudiiiii
    CORS 只是简单请求能发不一定能接收,非简单请求是浏览器直接拦截发不出去的
    ksc010
        16
    ksc010  
       2023-08-31 23:28:34 +08:00
    你应该是 CSRF XSS 闹混了
    flyqie
        17
    flyqie  
       2023-09-01 01:06:32 +08:00 via Android
    csrf 攻击造成数据泄露一般不是 csrf 自身造成的,或者说 csrf 攻击本身造不成数据泄露。


    不要拿 xss 攻击套 csrf 攻击,他俩效果不一样,csrf 攻击本身是啥情况前几楼举的例子已经很清楚了。
    shermie
        18
    shermie  
    OP
       2023-09-01 09:22:05 +08:00
    谢谢大佬们 现在是明白了
    euronx
        19
    euronx  
       2023-09-01 10:58:58 +08:00
    另外现在有 same site cookie 限制了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:37 · PVG 23:37 · LAX 07:37 · JFK 10:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.