V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
momocraft
V2EX  ›  信息安全

在 http 网页中使用 CSP 能帮助防止 http 劫持吗?

  •  
  •   momocraft · 2017-04-20 01:15:02 +08:00 · 4140 次点击
  •   查看本主题需要登录
    这是一个创建于 2776 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个论坛不时被人注入外站脚本. 站本身内容不像有问题, 所以猜测是运营商的 http 劫持.

    我感觉在页面中用 CSP 限制脚本资源的域有可能改善 http 劫持, 有人做过类似的事吗?

    (这个论坛有大量 http 资源外链, 暂不能切 https)

    16 条回复    2017-06-07 09:27:55 +08:00
    Quaintjade
        1
    Quaintjade  
       2017-04-20 01:31:16 +08:00 via Android   ❤️ 1
    可以防简单粗暴的加塞脚本劫持。
    但理论上仍能劫持,比如把你 http 头的 csp 也篡改了。
    virusdefender
        2
    virusdefender  
       2017-04-20 01:39:32 +08:00 via iPhone
    还不错的,当然运营商是通用劫持,可能不会用上面的方法来单独针对你。
    caola
        3
    caola  
       2017-04-20 02:17:45 +08:00
    有可能会把全部的 CSP 响应头或标签干掉就完事了,但至少目前还没有发现这样的行为。

    不过建议你还是尽快切换为 https ,引用的 http 外链建议全部本地化。
    yyfearth
        4
    yyfearth  
       2017-04-20 05:57:58 +08:00
    可以暂时改善 但是 ISP 可以轻松的通过把你的 CSP 头去掉或者改掉 然后接着劫持
    yyfearth
        5
    yyfearth  
       2017-04-20 05:59:09 +08:00
    另外 ISP 还可以劫持 JS 脚本来做到同样的事情 CSP 就无能为力了
    nfroot
        6
    nfroot  
       2017-04-20 08:59:48 +08:00
    @Quaintjade js 写入 meta 劫持不了吧(可以在代码上稍微改变一下 meta 标签的特征)
    03
        7
    03  
       2017-04-20 09:36:54 +08:00
    外链的一般是图片吧,那应该可以试试把自己控制的都用 https ,虽然有警告但加载 http 图片一般是可以的
    qcloud
        8
    qcloud  
       2017-04-20 09:50:41 +08:00 via iPhone
    不能,配合 https 才有效
    Quaintjade
        9
    Quaintjade  
       2017-04-20 09:56:22 +08:00
    @nfroot
    既然是明文传输,理论上可以把你用来写入 meta 的那个 js 劫持或者篡改掉。
    当然这只是理论上的,实际上运营商不会费这么大力气来单独劫持你的网站。
    est
        10
    est  
       2017-04-20 09:59:37 +08:00   ❤️ 1
    运营商劫持的原理是把 xxxx.js 改成 他们的广告 js 然后最后加一句 document.write("xxxx.js?v=123123")

    其中 v=123123 就是劫持白名单

    最好的办法是页面中的 js 的 URL 不以 js 结尾。

    然后页面要这样写:

    <html>
    <!-<head>
    </head>-->
    <head>
    ...
    </head>
    <!-<head></head><body>-->
    <body>
    </body>
    </html>

    这样一些自作聪明插入 js 的劫持也会插入到注释里去
    shiji
        11
    shiji  
       2017-04-20 10:07:22 +08:00
    另外你可以在某些页面插入自己的一段 js 脚本,随机把当前整个 html 里面的内容 post 回你的服务器,看看有没有遭到篡改。 一些浏览器插件也会修改,反正自己人工比较吧。
    nfroot
        12
    nfroot  
       2017-04-20 10:58:57 +08:00
    @est 于是自作聪明的劫持在代码开头写了一个<!-- 完美消除楼上带来的影响 --->,类似的还有 noscript 标签, noframes 标签哈哈哈哈
    est
        13
    est  
       2017-04-20 11:32:26 +08:00
    @nfroot 你写一个试试?我看看如何完美的。
    tinkerer
        14
    tinkerer  
       2017-04-20 21:58:35 +08:00
    @nfroot 我也想看您是怎么完美的。
    dong3580
        15
    dong3580  
       2017-06-07 09:19:44 +08:00
    @est
    不太明白,为什么这样写会
    est
        16
    est  
       2017-06-07 09:27:55 +08:00   ❤️ 1
    @dong3580 你看我 blog 源码就是这样处理过的 http://blog.est.im/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4347 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 01:08 · PVG 09:08 · LAX 17:08 · JFK 20:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.