既然有 SSL pinning, 那么有没有针对静态资源尤其是 js 脚本的 pinning - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
zhng920823
V2EX    奇思妙想

既然有 SSL pinning, 那么有没有针对静态资源尤其是 js 脚本的 pinning

  •  
  •   zhng920823 2024-08-21 00:48:15 +08:00 1787 次点击
    这是一个创建于 487 天前的主题,其中的信息可能已经有所发展或是发生改变。

    参考前文 供应链投毒后,我们的选择还剩下哪些?

    最近做了个匿名加密可 WebRTC 视频的聊天室

    填昵称即可进的匿名聊天室

    • 这个聊天室的一大特点就是, 前端加密后再发送, 服务端看不聊天内容.
    • 而且前端代码量不大, 用户可借用工具或 AI 分析验证这个说法.
    • 但是如果需要长期保持信任, 那么需要验证前端代码从上次检验过后没有被修改过.
    • 那个前端只通过 websocket 和后台交互, 如果能保证前端没有被修改, 能保证通信是安全的.
    • 这个验证工作能否由浏览器或插件自动进行呢?

    如果这个特性能被浏览器标准化, 那么基于浏览器的应用能更好发展

    能成为互联网除了 TLS 外最基础的一个信任环节, 一个人/公司开始可能不坏, 但是后面会变坏.

    毕竟如文章开头提到的那件事, 现在对 cdn 和公共资源提供者无底线信任是最薄弱的环节.

    • 这个东西就是类似 script 标签的 integrity 属性, 但是工作在更底层的部分.
    7 条回复    2024-08-21 19:07:54 +08:00
    0o0O0o0O0o
        1
    0o0O0o0O0o  
       2024-08-21 01:12:01 +08:00 via iPhone   2
    不记得是第几次复制粘贴这个链接
    https://news.ycombinator.com/item?id=39436238

    去年吵翻天的 WEI 风波证明了人们不接受这样的东西,我认为不用抱这种期待了
    https://en.wikipedia.org/wiki/Web_Environment_Integrity

    做应用的话可以参考 fb 的做法,相当于信任 Google 和 Mozilla 的市场这样的分发渠道
    https://chromewebstore.google.com/detail/code-verify/llohflklppcaghdpehpbklhlfebooeog
    zhng920823
        2
    zhng920823  
    OP
       2024-08-21 01:14:19 +08:00
    @0o0O0o0O0o #1 大佬果然博学
    qweruiop
        3
    qweruiop  
       2024-08-21 12:34:31 +08:00
    wei 已经不行了,现在最好的办法就是信任 Google/Apple 的分发渠道啦,web 的东西就算了吧。。。
    iqoo
        4
    iqoo  
       2024-08-21 14:07:01 +08:00
    全站静态资源 Hash 锁定,几年前就写过: https://github.com/EtherDream/freecdn/blob/master/docs/feature/README.md#%E5%85%A8%E7%AB%99-Hash-%E6%A0%A1%E9%AA%8C

    都快忘了这个项目了,好久没更新。
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2024-08-21 14:25:00 +08:00
    iqoo #4 SRI 或者说目前浏览器网页的所有方案都满足不了 OP 的需求,毕竟只是 Subresource ,也就是你提到的第三方站点,OP 设想中应用则是连自己的站点也无法信任
    zhng920823
        6
    zhng920823  
    OP
       2024-08-21 18:03:17 +08:00
    @iqoo #4
    @0o0O0o0O0o #5

    只是全站静态资源 hash 固定还不够 也不够灵活

    还要要求原始的代码够简单, 不说能完全让人读懂, 但至少能粗略审核保证没有主观恶意或漏洞/后门

    要保证从服务器动态获取的只有数据, 不能有执行代码, eval 和动态加 script 标签肯定不行.
    (注: 我的 webd 网盘的早期版本就是远程加载 js 文件, 当时想的是将来灵活加广告.
    近期版本都改成了请求远程数据, 解析成链接加上去, 即便服务器被攻陷了, 用户也很安全.)

    如果浏览器发现网站代码更新了, 做一次简单的分析, 改颜色改大小改文字图片这种, 可默认放过.

    js/wsam 代码则用 AST 语法树分析, 给高级用户们显示个比较直观的 diff 代码, 给麻瓜们显示这次修改的风险等级.

    这个原则下的网站/APP 需要做到真正小而美, 一坨坨的东西肯定不行.

    Q: 如果依赖了太多东西整体庞大分析起来费劲怎么办?
    A: 被依赖的东西做成标准模块, 带上签名, 避免重复分析.

    下面的贴提到一些杀毒软件在做类似的工作, 但不是标准化行为.
    /t/1064948 火绒 SSL 流量嗅探?

    我觉得以后浏览器应该考虑这个东西, 毕竟现在浏览器已经是操作系统了.
    如果有认识 chrome 或 ladybird 浏览器的大佬, 可以提一下这个想法.
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       2024-08-21 19:07:54 +08:00
    > 还要要求原始的代码够简单, 不说能完全让人读懂, 但至少能粗略审核保证没有主观恶意或漏洞/后门

    这是优点,但我认为和要讨论的浏览器提供的特性没有太大关系,因为这样的特性应当是通用的,而且我对未经训练的人士能审计出精心构造的漏洞持怀疑态度。这个特性需要确保应用在被专业机构审计后,用户一定可以原封不动地拿到审计过的版本,浏览器网页欠缺这个保障。

    > 如果有认识 chrome 或 ladybird 浏览器的大佬, 可以提一下这个想法

    它们是开源项目,你可以自己去提 proposal 。但我建议先了解 WEI 风波期间对它的那些激烈批评,了解它为什么广受批评:浏览器是一个“通用”的运行环境,你当然可以借助这个特性保护用户的安全,但别人也可以借助这个特性剥削用户。我认为 Chromium 数年内是没机会再(往所有平台)加入这类特性了,ladybird 的定位则让它天然抵制这类特性。我坚持我的观点:不要在**浏览器网页**中解决这些问题,既不要试图在现在用各种思路实现(也不可能实现),也不要期待未来会增加这样的特性。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     868 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 20:01 PVG 04:01 LAX 12:01 JFK 15:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86