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

不懂就问: csrf 攻击的疑问

  •  
  •   shermie · 239 天前 · 2288 次点击
    这是一个创建于 239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

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

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

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

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


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

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

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

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

    如果你后来又部署了一个站点 D ,站点 D 与接口 d 同源,
    那么,此时在站点 C 调用接口 d 时,它会默认带 D 站点的 cookie 。
    mdn
        14
    mdn  
       239 天前
    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  
       239 天前
    @wudiiiii
    CORS 只是简单请求能发不一定能接收,非简单请求是浏览器直接拦截发不出去的
    ksc010
        16
    ksc010  
       239 天前
    你应该是 CSRF XSS 闹混了
    flyqie
        17
    flyqie  
       239 天前 via Android
    csrf 攻击造成数据泄露一般不是 csrf 自身造成的,或者说 csrf 攻击本身造不成数据泄露。


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