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

稳定复现,看我几行代码搞崩 Chrome

  •  7
     
  •   xiangyuecn ·
    xiangyuecn · 2022-03-10 10:26:49 +08:00 · 19072 次点击
    这是一个创建于 979 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞崩 chrome 测试页面: https://xiangyuecn.gitee.io/recorder/assets/ztest_chrome_bug_AudioWorkletNode.html (打开后可能需要右键刷新一下页面)

    过程分析记录: https://www.cnblogs.com/xiangyuecn/p/15988061.html

    最新的 chrome 97 打开测试页面测试后每次都会崩溃,最开始发现的 chrome80 也会崩溃(不过测试页面反而不会崩了),古董版本 66 70 不会崩溃,更老的不支持 AudioWorklet 不用测试

    这个崩溃现象也就是在特定时机才会出现,FireFox 测试的完全没有这个问题

    [×]提交 bug

    [√]v2ex 发帖

    测试页面截图:

    崩溃截图:

    158 条回复    2023-04-10 00:38:43 +08:00
    1  2  
    gadfly3173
        101
    gadfly3173  
       2022-03-10 19:49:59 +08:00 via Android
    @ie88 各大视频网站还有一堆默认自动播放视频的操作呢,浏览器也不是直接允许的,也没看有哪家浏览器针对这种行为做提示啊?浏览器只需要做规范里提到的内容就可以了,不应该画蛇添足自以为是
    ie88
        102
    ie88  
       2022-03-10 20:01:43 +08:00
    @gadfly3173 你说的这些目前是这样的,可是如果 AudioContext 这个 API 没经过用户操作就能进行音频播放的话,是不是很容易出现类似网页被挂马这种情况,自动播放一些不和谐的音频,可能让审查机构误认为是网站开发人员故意操作的。
    ie88
        103
    ie88  
       2022-03-10 20:06:23 +08:00
    @gadfly3173 你说的自动播放视频通常视频流是被加密了的,应该不会被恶意篡改。而 AudioContext 这个 API 播放音频流应该没有做到加密处理,应该被恶意篡改的风险很高吧
    gadfly3173
        104
    gadfly3173  
       2022-03-10 20:08:18 +08:00 via Android
    @ie88 。。。所以浏览器只要阻止操作就可以了。。你要区分有关用户的安全问题和流氓行为。安全问题浏览器应当阻止并提示,流氓行为最多阻止就好了。什么网站挂马之类的不在浏览器应该考虑的范围。包括还有 xss 之类的操作,防范这些无法被机器判断的安全问题应该是网站自身做好的,而不是让浏览器解决。
    ie88
        105
    ie88  
       2022-03-10 20:11:12 +08:00
    @gadfly3173 哦,我大致明白了,多谢指点。
    q1angch0u
        106
    q1angch0u  
       2022-03-10 20:13:51 +08:00 via iPhone
    幸好 iOS 的 chrome 用 webkit [狗头]
    iajr
        107
    iajr  
       2022-03-10 20:21:07 +08:00
    Google Chrome
    版本 99.0.4844.51 (正式版本) (x86_64)
    macOS 12.2 ( Intel )
    成功复现
    iajr
        108
    iajr  
       2022-03-10 20:24:20 +08:00
    又试了一下,发现并不是每次都会复现,有一定概率崩溃
    ie88
        109
    ie88  
       2022-03-10 20:30:04 +08:00
    @gadfly3173 https://developer.chrome.com/blog/autoplay/#webaudio
    我刚看了下 Autoplay policy in Chrome ,有以下描述

    The Autoplay Policy launched in Chrome 66 for audio and video elements and is effectively blocking roughly half of unwanted media autoplays in Chrome. For the Web Audio API, the autoplay policy launched in Chrome 71. This affects web games, some WebRTC applications, and other web pages using audio features. More details can be found in the Web Audio API section below.

    As you may have noticed, web browsers are moving towards stricter autoplay policies in order to improve the user experience, minimize incentives to install ad blockers, and reduce data consumption on expensive and/or constrained networks. These changes are intended to give greater control of playback to users and to benefit publishers with legitimate use cases.

    Chrome's autoplay policies are simple:

    Muted autoplay is always allowed.
    Autoplay with sound is allowed if:
    The user has interacted with the domain (click, tap, etc.).
    On desktop, the user's Media Engagement Index threshold has been crossed, meaning the user has previously played video with sound.
    The user has added the site to their home screen on mobile or installed the PWA on desktop.
    Top frames can delegate autoplay permission to their iframes to allow autoplay with sound.

    我觉得这个 policy 已经说得很明确了,所以页面直接崩溃( effectively blocking roughly half of unwanted media autoplays in Chrome )是 Chrome 现在正在用的做法,不属于 bug 不是吗?
    ie88
        110
    ie88  
       2022-03-10 20:34:10 +08:00
    effectively blocking roughly half of unwanted media autoplays in Chrome ,是 half 而不是 all ,不也正好解释大家半天测试的时候,有的时候出现崩溃,有的时候没崩溃的情况吗
    ie88
        111
    ie88  
       2022-03-10 20:38:06 +08:00
    @ie88 更正一下,是 roughly half 而不是 all
    Routeros
        112
    Routeros  
       2022-03-10 20:43:26 +08:00
    版本 99.0.4844.51 (正式版本) ( 64 位) 复现
    ie88
        113
    ie88  
       2022-03-10 20:47:22 +08:00
    "web browsers are moving towards stricter autoplay policies in order to improve the user experience",就提升用户体验来讲,chrome 团队认为 "block unwanted media autoplays" 要比 allow unmuted media autoplays 好,所以他们进行了 block 处理,如何实现 block ,这个 policy 没提到,我个人认为就是直接让页面崩溃,他们找不到比这更合适的做法了
    ie88
        114
    ie88  
       2022-03-10 20:49:27 +08:00
    @xiangyuecn @Huelse @gadfly3173 请各位看看这个 policy ,是不是我说的这个意思
    ie88
        115
    ie88  
       2022-03-10 20:52:20 +08:00
    而且就 block 这个做法来讲,开发者在开发测试上线各个环节都会遇到崩溃的情况,能够及时修复这个问题,基本没有机会让用户操作导致页面崩溃的情况发生,这样既保护了用户又约束了开发者,这种做法不合适嘛?
    Mac
        116
    Mac  
       2022-03-10 20:52:38 +08:00
    @shakoon #15 感人啊,到现在还有百分的用户坚持着。我春节期间彻底弃用换 EDGE 了,因为 NAS 的菜单已经不兼容了。
    gadfly3173
        117
    gadfly3173  
       2022-03-10 20:55:06 +08:00 via Android
    @ie88 。。。你的理解有大问题。。。阻止自动播放真的只是字面意义上的不能自动播放,也就是视频暂停 /音频暂停之类的。。。页面崩溃可不是什么正确的阻止播放的做法。。。你要站在一般用户的立场上来思考。。。不如你用隐身模式打开个视频网站试试。。。
    ie88
        118
    ie88  
       2022-03-10 21:06:07 +08:00
    @gadfly3173 不是,页面崩溃是在开发者开发测试上线环节都会遇到的问题,开发者遇到这样严重的 bug 怎么会把这样的代码放到生产环境去跑,用户层面无法感知这样的页面崩溃,这个过程是在开发测试上线环节已经约束了开发者,是不影响用户的,因为你正经做开发怎么会带着这样的 bug 上线。你想实现自动播放,直接 mute 就可以呀,unmute 就是不让你的代码成功跑起来,应该没问题吧
    ie88
        119
    ie88  
       2022-03-10 21:13:21 +08:00
    @gadfly3173 我是觉得咱们这样的技术论坛就是应该有人去发现问题,讨论问题,定位问题,甚至解决问题。希望这个帖子能够吸引一些 V8 引擎开发团队的成员,来讲解一下目前这个问题故意不 catch 这样的 exception 来约束开发者,还是说确实属于 bug 需要修复,或者 browser policy 的制定团队有人解释一下这个 block 操作是不是包含页面崩溃这种做法。
    SimonOne
        120
    SimonOne  
       2022-03-10 21:15:05 +08:00
    Vivaldi 5.1.2567.57 (Stable channel) (x86_64) 复现
    kaedea
        121
    kaedea  
       2022-03-10 21:20:32 +08:00 via Android
    Android Chrome 成功复现
    cyp0633
        122
    cyp0633  
       2022-03-10 21:46:24 +08:00
    Chromium 101.0.4928.0 刷新两次后崩溃
    maskerTUI
        123
    maskerTUI  
       2022-03-10 21:51:13 +08:00
    Chromium 86 崩溃
    Wanerlove
        124
    Wanerlove  
       2022-03-10 21:52:04 +08:00
    Chrome 101.0.4935.0 稳定复现
    sarvatathagata
        125
    sarvatathagata  
       2022-03-10 22:24:27 +08:00
    Chrome 99.0.4844.51 Ubuntu 20.04 经过刷新与彻底刷新,重开浏览器等尝试,没有任何崩溃
    luzemin
        126
    luzemin  
       2022-03-10 22:43:02 +08:00
    Version 99.0.4844.51 (Official Build) (64-bit)

    多刷几下崩溃
    skiy
        127
    skiy  
       2022-03-10 23:04:27 +08:00
    About

    Microsoft Edge
    Version 99.0.1150.30 (Official build) beta (64-bit)
    This browser is made possible by the Chromium open source project and other open source software.

    Microsoft Edge

    不打开控制台,浏览器没崩,页面也没崩。
    打开控制台,浏览器没崩,页面崩。
    abc612008
        128
    abc612008  
       2022-03-10 23:26:05 +08:00
    @ie88

    这当然是 bug ,浏览器在任何情况下都不应该崩溃。这里的正常行为是发出下面这样一个 warning ,然后 Audio 没有被自动播放。

    The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#webaudio

    如果你打开楼主那个网页的话也能看到这么一个 warning 。如果你再仔细看的话,这里崩溃的时刻已经是在 user gesture 之后了(用户点击网页后才执行的代码)。所以崩溃很可能和 autoplay 关系不大,或者最多是这个 autoplay policy 的 unintended 副作用(bug)。

    其次,崩溃的错误代码是 STATUS_ACCESS_VIOLATION. Access violation 通常指代的是访问一块没有对应权限的内存。显然这和你所说的 autoplay policy 没有什么关系。

    如果你还坚持这是个正常行为的话,那怎么解释这个网页有时候崩有时候不崩呢。
    kilasuelika
        129
    kilasuelika  
       2022-03-11 00:03:28 +08:00 via Android
    安卓 101 版本,第一次打开时崩了,后来就没有了
    her999
        130
    her999  
       2022-03-11 01:52:29 +08:00
    版本 99.0.4844.51 (正式版本) ( 64 位) for linux 复现成功。点一下,稍等一会,奔溃。
    maomaochong199
        131
    maomaochong199  
       2022-03-11 04:18:47 +08:00 via Android
    @xtinput 你怎么在用 arm 架构,是什么机子啊
    baysonfox
        132
    baysonfox  
       2022-03-11 07:54:44 +08:00
    Microsoft Edge 99.0.1150.39 (x86_64) 复现不稳定,10 次测试内有 3~5 次失败, 其余成功复现.
    l4ever
        133
    l4ever  
       2022-03-11 08:39:14 +08:00
    360 极速 x
    内核 95, 扛住了.
    shakoon
        134
    shakoon  
       2022-03-11 08:40:52 +08:00
    @Mac #116 我发觉每一个被我长期使用的浏览器最后都会倒闭……十几年前 maxthon2 我用了好多年,被收购后改得惨不忍睹。后来 chrome 崛起后用的枫树浏览器也是莫名其妙的倒闭了,一直用到大约 18 年好多网页都显示不正常了才不得不换。现在百分一年多没更新,不知是不是也凉了。目前倒是没遇到什么网站不兼容,但愿能多撑一段时间吧。
    话说这家小公司国内外用户还是不少的,真要是经济困难开放一个捐助通道我觉得还是能募集到一些资金的。我觉得更大的可能性是因为动到了被某大厂的蛋糕,被悄悄收购了然后安乐死
    xtinput
        135
    xtinput  
       2022-03-11 08:47:36 +08:00
    @maomaochong199 #133 21 款 16 寸 M1Max
    yxzblue
        136
    yxzblue  
       2022-03-11 08:56:01 +08:00
    Chrome 98.0.4758.102 没崩
    heliang
        137
    heliang  
       2022-03-11 09:07:03 +08:00
    chrome 版本 99.0.4844.51 (正式版本) (arm64)
    崩溃
    yveJohn
        138
    yveJohn  
       2022-03-11 09:34:11 +08:00
    Microsoft Edge
    版本 98.0.1108.43 (官方内部版本) (64 位)
    未复现
    yxisenx
        139
    yxisenx  
       2022-03-11 09:40:40 +08:00
    崩了, 版本 99.0.4844.51 (正式版本) ( 64 位)
    acess
        140
    acess  
       2022-03-11 10:16:21 +08:00 via Android
    chrome 的 audioworklet 好像还有内存泄漏 bug 来着,各种 disconnect 、close context 都删不掉,所以如果反复创建就可能爆内存。
    acess
        141
    acess  
       2022-03-11 10:20:23 +08:00 via Android
    话说我也觉得,点击一下页面就播放音频,虽然不是完全没拦截,但还是不如弹个窗确认好。
    xuyl
        142
    xuyl  
       2022-03-11 10:31:35 +08:00
    借楼,win7 chrome v99.0.4844.51 ,出现标签页混乱卡顿问题,有人遇到吗?
    ![]( https://s3.bmp.ovh/imgs/2022/03/cfad5d665850a8cb.jpg)
    24bit
        143
    24bit  
       2022-03-11 11:00:27 +08:00
    99.0.4844.51 复现
    Atsushi
        144
    Atsushi  
       2022-03-11 11:21:08 +08:00
    Microsoft Edge
    版本 99.0.1150.36 (正式版本) (64 位)
    Microsoft Edge
    版本 99.0.1150.39 (正式版本) (64 位)
    都崩了
    GeruzoniAnsasu
        145
    GeruzoniAnsasu  
       2022-03-11 12:17:36 +08:00
    @ie88 一句话阻止抬杠:
    access violation 是 segment fault

    你写了一个读取空指针的代码并视其为「用户保护措施」
    Lemeng
        146
    Lemeng  
       2022-03-11 14:01:25 +08:00
    ff 正常
    MonkeyJon
        147
    MonkeyJon  
       2022-03-11 14:52:26 +08:00
    谢谢你,陌生人
    aurtech
        148
    aurtech  
       2022-03-11 15:16:54 +08:00
    坐标深圳,求一枚 Golang/Python 大佬!!欢迎砸简历 V:Ifboredgunquxuexi.
    Kaiv2
        149
    Kaiv2  
       2022-03-11 23:14:34 +08:00
    Microsoft Edge
    版本 99.0.1150.36 (正式版本) (arm64)
    时好时坏
    alan0liang
        150
    alan0liang  
       2022-03-12 01:03:52 +08:00
    Chromium 版本 98.0.4758.102 (正式版本) Arch Linux ( 64 位)
    只有第一次崩了,后面再刷新就没事了
    ablu
        151
    ablu  
       2022-03-12 10:56:58 +08:00
    1/6 、2/6 、3/6 正常 4/6 、5/6 、6/6 崩溃
    Google Chrome
    版本 99.0.4844.51 (正式版本) (x86_64)
    nkcfc
        152
    nkcfc  
       2022-03-12 12:50:15 +08:00
    Linux 下,Chrome beta 版本 99.0.4844.27 (正式版本) beta ( 64 位)
    刷新后复现。
    azraeljack
        153
    azraeljack  
       2022-03-12 13:04:59 +08:00
    Edge 98.0.1108.56 试了几次没有崩
    neiltroyer849
        154
    neiltroyer849  
       2022-08-01 00:17:24 +08:00
    Chrome 103 macOS 12.5 Arm64 ,稳定复现,次次都崩
    binux
        155
    binux  
       2023-04-05 01:52:43 +08:00 via Android
    过来 ping 一下 LZ ,看一下 CVE-2023-1222 如果当初
    [√]提交 bug
    可能$7000 就到手了
    xiangyuecn
        156
    xiangyuecn  
    OP
       2023-04-09 14:04:59 +08:00
    @binux #155 😂牛逼 错过一个亿

    https://bugs.chromium.org/p/chromium/issues/detail?id=1403515

    Permission denied. 100w 刀也不提交
    binux
        157
    binux  
       2023-04-09 22:11:50 +08:00 via Android
    @xiangyuecn 安全 bug 是不公开的,但是看 cve 描述是一致的
    xiangyuecn
        158
    xiangyuecn  
    OP
       2023-04-10 00:38:43 +08:00
    @binux 原来如此,看不到也是心痒痒😁
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5739 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 229ms · UTC 06:38 · PVG 14:38 · LAX 22:38 · JFK 01:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.