V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

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

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

突然想到浏览器端防止 http 挟持的一种方式

  •  
  •   bazingaterry · 2016-06-12 23:16:51 +08:00 · 4375 次点击
    这是一个创建于 3084 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 当用户输入 url 的时候,如果浏览器首先以 https 方式访问。
    • 如果 443 端口访问不通,再自动回落到 80 端口。
    • 如果证书错误,则停止回落,报告用户。

    毕竟一般输入网址都不会手动输入 https://,除非用户显式输入 http:// 才首先用 http 方式访问。个人感觉这样就能降低被挟持的概率?突然想到的, V 友一起讨论下有没有漏洞?

    19 条回复    2016-06-13 20:58:30 +08:00
    DoraJDJ
        1
    DoraJDJ  
       2016-06-12 23:23:37 +08:00 via Android
    HSTS ?
    Librazy
        2
    Librazy  
       2016-06-12 23:24:51 +08:00 via Android
    实际上现在的做法更激进,使用 HSTS preload list ,在这个列表里的域名只能通过 HTTS 。
    测试 443 端口有一个小问题, 80 和 443 可能是两个站,会对用户带来一些困扰。
    你如果怕自己的网站遭受 HTTP 劫持,可以试试申请 HSTS preload
    xupefei
        3
    xupefei  
       2016-06-12 23:25:32 +08:00
    CDN 的 IP 和域名不是一一对应的。另外,还有共享主机这种东西呢。
    bazingaterry
        4
    bazingaterry  
    OP
       2016-06-12 23:30:15 +08:00
    @DoraJDJ 我知道有 HSTS ,但是我这里比较看重的是首次访问,如果首次访问 HSTS preload list 里面没有这个域名的话,很可能用户是用 http 访问的,这样也有可能被挟持。
    @Librazy 的确,如果 80 和 443 可能是两个站的话,会对用户带来一些困扰。
    bdbai
        5
    bdbai  
       2016-06-12 23:31:33 +08:00 via Android
    有些站的 HTTPS 证书没配置对,只能公开 HTTP ,突然来一下警告不会吓跑用户么?站长得问你要 1kw 了啊
    bazingaterry
        6
    bazingaterry  
    OP
       2016-06-12 23:57:32 +08:00
    @bdbai 嗯, HTTPS 证书没配置对就应该干脆不监听 443 嘛……
    bazingaterry
        7
    bazingaterry  
    OP
       2016-06-12 23:58:03 +08:00
    @xupefei 的确,这个是一个大问题,自己一直用 VPS 建站忽略这个东西了。
    Gua
        8
    Gua  
       2016-06-13 00:05:09 +08:00
    @bdbai 比如我前天~
    JoyNeop
        9
    JoyNeop  
       2016-06-13 00:10:51 +08:00 via iPhone
    劫持 443 端口流量,伪造成没有响应,用户访问 80 时劫持者再再反代到 443
    ferrum
        10
    ferrum  
       2016-06-13 01:03:03 +08:00 via iPhone
    这个想法不是和 Chrome 和 Firefox 上的 HTTPS Everywhere 一样吗?
    tSQghkfhTtQt9mtd
        11
    tSQghkfhTtQt9mtd  
       2016-06-13 01:22:08 +08:00 via Android
    @bazingaterry HSTS Preload 是硬编码根域在浏览器内的,支持这一特性的浏览器在访问 Preload 域下任何一个子域名都会强制 HTTPS ,哪怕你是首次访问并且使用 HTTP 也会自动升级
    lslqtz
        12
    lslqtz  
       2016-06-13 03:49:20 +08:00   ❤️ 2
    给你举一个证书错误的例子吧。
    http://233.dog/f_89032897.png
    有一个解决方案可以解决,但是不可取。
    即在 https 证书错误的情况下回落到 http ,但是 https 证书错误如为中间人攻击,那么回落到 http 还是会被攻击。
    其实,目前大部分虚拟主机不支持 https ,但是大多数也开启了 443 端口。
    同样,也有大量 CDN 不支持 https ,但是开启了 443 端口。
    还有部分网站 http 和 https 是不同的,举个栗子,部分政府网站 http 是网站界面, https 是后台,这会导致一些问题。
    再以及,如果每个用户访问时都去探测 443 端口会造成极大的额外负担,可以形成 DDoS 。即使缓存可以解决,但是仍然会出现负担增加的情况。

    当 https 的成本足够低时,可以把主流浏览器直接输入后打开为 https 页面,同时对 http 报不安全。
    实际上,这很不公平,因为一张 SHA1 证书可以导致 Chrome 报不安全(证书在 2016 年前过期则变灰),但是 http 却没有任何提示。
    我认为,即使是 SHA1 的 https 连接,也比 http 安全。
    这是一张被 Chrome 变灰的, 2016 年前过期的 SHA1 证书。
    http://233.dog/f_93427429.png

    上面有 V 友提到 HSTS Preload List ,当域名内置在浏览器后,访问 http 时会自动跳转(307)到 https 。
    这是非常激进的做法,但是仍然会造成一些问题,举个栗子。
    1 、域名数量多了,列表体积会不会过大。
    2 、有什么好的方法在 HSTS Preload List 中删除域名,目前没听说过有人成功删除,这会导致以下问题。
    [1 、降级到 http 时被强制 301 到 https 。]
    [2 、由于 HSTS Preload List 中无法删除域名,意味着别人购买域名后必须使用 https ,这会降低域名的价值。]
    举个栗子,这次的京东从 https 降级到 http ,据说是因为部分 CDN 不支持 https 。
    要是京东曾申请进入 HSTS Preload List 列表,那么这次降级会导致大量用户无法访问京东首页。
    lslqtz
        13
    lslqtz  
       2016-06-13 04:10:37 +08:00   ❤️ 1
    我在本地签了一张 SHA1 的 SSL 证书,有效期 10 年,但是并未使用 Nginx 搭建成功,提示证书响应无效,于是换了 Apache 并截图上传,上传时我自己的图床抽风了,于是传到贴图库上了。
    这是一张被 Chrome 报不安全,在 2017 年或之后过期的 SHA1 证书。
    http://i2.buimg.com/11b85fb3b5587e22.png
    dbfox
        14
    dbfox  
       2016-06-13 08:13:40 +08:00 via iPhone
    我来说个最简单的方式
    js 判断是否有父窗口
    window.parent.loction=window.location
    参考
    www.kokbox.cn
    [一直在迭代的项目]
    davin
        15
    davin  
       2016-06-13 08:55:49 +08:00
    @lslqtz SHA1 早就不安全了
    est
        16
    est  
       2016-06-13 09:48:11 +08:00
    @dbfox 现在的劫持方式是把 /xxx.js 劫持了。换成 popup(广告 div) 然后 document.write(你原来的 xxx.js?v=123123)

    其中 v=123123 才不会被劫持。
    msg7086
        17
    msg7086  
       2016-06-13 13:45:37 +08:00
    所以说要普及 DANE 啊。普及了就什么都有了。
    lslqtz
        18
    lslqtz  
       2016-06-13 17:28:29 +08:00
    @davin 是不安全,但起码比 http 安全,就是不公平啊。。 http 是明文。
    Williamp
        19
    Williamp  
       2016-06-13 20:58:30 +08:00
    @lslqtz Microsoft has also told users to stay away from SHA1 ssl certificate https://www.clickssl.net/blog/microsoft-is-set-to-retire-sha1-rc4
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3328 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.