V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wunonglin
V2EX  ›  问与答

如何反广告拦截?

  •  
  •   wunonglin · 2021-04-23 12:30:53 +08:00 · 4540 次点击
    这是一个创建于 1297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如:www.bilibili.com

    访问主站通过 GET www.bilibili.com 打开,

    然后 bilibili 所有接口(这里注意,是所有的接口)通过 POST www.bilibili.com 在 body 通过{cmd: "XXX"}的形式加载,

    这样是否可以达到屏蔽域名你也不能正常访问网站?

    第 1 条附言  ·  2021-04-23 13:01:41 +08:00
    问题的本意是:“设计一个你不能屏蔽我网站的接口不然你就不能正常使用我的网站”

    例如正常的设计是:
    网站:www.bilibili.com
    用户接口 www.bilibili.com/api/user/1
    广告接口 www.bilibili.com/api/ad/2021-01-01

    按上面设计打开网站的话会去请求用户信息和广告信息。
    如果有人屏蔽了 www.bilibili.com/api/ad/* 这样会导致广告不能正常加载,达到屏蔽广告的效果。

    如果我这样设计:
    网站:GET www.bilibili.com
    用户接口 POST www.bilibili.com body:{cmd: "user", param: 1}
    广告接口 POSt www.bilibili.com body:{cmd: "ad", param:"2021-01-01"}

    这样如果你想屏蔽我的广告,那你获取不了我 body 的内容(除非装证书解了),
    你又不可能直接屏蔽 POST www.bilibili.com 因为网站所有的接口都是通过这里获取,如果屏蔽了网站会彻底打不开


    这样是否有可行性?或者有哪些没考虑到的需要补充
    43 条回复    2021-04-25 11:32:57 +08:00
    crclz
        1
    crclz  
       2021-04-23 12:49:07 +08:00
    不是很清楚你的问题。

    如果你想问能否通过访问 b 站的接口,制作 bilibili 的克隆网站,那么这个问题的答案是会有服务端跨源策略禁止你的 POST 。

    如果你想依赖 b 站的接口制作一个 bilibili 第三方纯净客户端,那么是可行的( windows 商店好像有)
    wunonglin
        2
    wunonglin  
    OP
       2021-04-23 12:50:40 +08:00
    @crclz #1 我的意思是设计一个“你不能屏蔽我网站的接口不然你就不能正常使用我的网站”
    crclz
        3
    crclz  
       2021-04-23 12:53:57 +08:00
    哦我好像懂你的意思了。忽略我的上一条
    cmdOptionKana
        4
    cmdOptionKana  
       2021-04-23 13:11:34 +08:00
    感觉不太行,我可以先把广告一起获取了,但不显示。
    oott123
        5
    oott123  
       2021-04-23 13:12:57 +08:00   ❤️ 2
    一般没有这么费劲的,检查到广告加载失败直接罢工就是了

    但广告拦截软件还可以放过广告请求,但动态修改你的 DOM,然后你通过一个 js 去检测他有没有改你的 DOM,如果有你就再罢工……

    何必互相伤害呢,装了广告拦截的用户几乎都不是广告的受众,带不来什么收益,广告屏蔽对双方都好……
    cxe2v
        6
    cxe2v  
       2021-04-23 13:13:00 +08:00
    ```
    例如正常的设计是:
    网站:www.bilibili.com
    用户接口 www.bilibili.com/api/user/1
    广告接口 www.bilibili.com/api/ad/2021-01-01
    ```
    你得用户接口不还是和广告接口不一样吗?依然可以制定匹配规则,精准屏蔽你的广告接口
    lichdkimba
        7
    lichdkimba  
       2021-04-23 13:16:16 +08:00
    前后端不分离 可以直接没有广告接口啊。。。
    3dwelcome
        8
    3dwelcome  
       2021-04-23 13:39:40 +08:00
    我猜测楼主想描述的,就是和小米电视广告屏蔽一样,不能简单只改 hosts,就把广告给删了。

    个人总结下来有四种方法:
    1 是和 bilibili 客户端一样,页面初始化的时候强制调用 www.bilibili.com/api 接口,再进入主页面,你肯定不能把 www.bilibili.com 给删掉吧。
    2 是请求用 websocket 处理,因为是流式数据,不可能只屏蔽广告其中一个请求。还可以自己写一点协议加密。
    3 是用 vue 之类属性监控方法,看 dom 有没有被外部脚本动态修改。
    4 运行过程中,用遍历 dom 方式,给 http 整体签个名。不符合服务器预设签名的,直接不显示内容,用户只会觉得是广告拦截的问题。


    其实最好的办法,就是检测在 chrome developer tool 里 content scripts, 所有会对你网站 DOM 进行恶意操作的脚本,都在这个列表里。只是目前不清楚怎么能获取。
    cpstar
        9
    cpstar  
       2021-04-23 13:45:00 +08:00
    网站运营方这么搞,成本太高,除非自己就是广告渠道商。
    wunonglin
        10
    wunonglin  
    OP
       2021-04-23 13:46:48 +08:00
    @oott123 #5
    @lichdkimba #7
    不一定是网页、例如其他设备

    @cxe2v #6 我说的是将正常的改成下面的


    @3dwelcome #8 是的。例如 host 、ssr 规则之类的就能去掉,提高去除门槛而已。websocket 也不错,只是要支撑很多人的情况下消耗太大。
    wolfie
        11
    wolfie  
       2021-04-23 13:51:23 +08:00   ❤️ 1
    服务端渲染成,canvas 显示

    广告有没有获取、获取后有没有渲染、渲染后有没有被屏蔽、检查是否渲染和屏蔽代码 有没有被屏蔽。
    retanoj
        12
    retanoj  
       2021-04-23 16:25:06 +08:00
    你咋绕过的人家,人家就咋绕过的你
    除非广告不是广告,广告就是正常的内容
    X-Force
        13
    X-Force  
       2021-04-23 16:44:53 +08:00
    人家直接操作 CSS 或 DOM 移除相关内容就行,管你是什么接口获取的内容。
    wpyfawkes
        14
    wpyfawkes  
       2021-04-23 17:14:06 +08:00
    我记得达尔盖的旗帜检测到广告被屏蔽就不会显示图片,楼主可以去研究下.😆
    wunonglin
        15
    wunonglin  
    OP
       2021-04-23 17:24:53 +08:00
    @X-Force #13 java 、swift 、qt 也可以么
    joesonw
        16
    joesonw  
       2021-04-23 17:50:40 +08:00 via iPhone
    1,获取路径也要证书解的
    2,屏蔽广告是浏览器插件,可以获取你所有请求信息(授权情况下),没有证书不证书一说。
    honeycomb
        17
    honeycomb  
       2021-04-23 17:59:09 +08:00 via Android   ❤️ 1
    @wunonglin 实际上很多网页就是这么做的,把 html 元素的 id/class 标记成随机数,这样 adblocker 就很难去拦截它。
    为此 adblocker 发展出了更复杂的拦截功能。
    anti-adblock 也类似,可以用相同的 anti-anti-adblock 去反制。
    app 的 api 可以用代理实施中间人攻击,对付方法也有,用 tls 证书绑定,非越狱 /root 无解
    honeycomb
        18
    honeycomb  
       2021-04-23 18:01:06 +08:00 via Android   ❤️ 6
    前几年 cnbeta 曾经和 adblocker 打过一架,几分钟更新一次前端代码,后来发现搞不过。
    现在它就把广告放到信息流里不和正常信息区分了,但是 adblocker 还是能认出来,因为它用了广告联盟的链接
    wunonglin
        19
    wunonglin  
    OP
       2021-04-23 18:13:21 +08:00
    @honeycomb #18 原来这么精彩。领教了
    locoz
        20
    locoz  
       2021-04-23 18:26:12 +08:00
    其实没啥卵用,无非就是处理成本的问题。你要搞特殊加载方式,别人就直接用透明代理检测内容做拦截,或者直接就 hook 你程序干掉广告内容的显示,实在不行就压根不用你的东西...
    locoz
        21
    locoz  
       2021-04-23 18:29:06 +08:00
    @honeycomb #17 现在 Android 上对非系统应用是可以不需要 ROOT 、解 BL 锁的,直接套容器里弄个虚拟环境出来就随便搞了,所以也就只是 iOS 无解。
    pkookp8
        22
    pkookp8  
       2021-04-23 18:46:34 +08:00 via Android
    后端把网页生成图片贴到前端,啥都能防
    natsji
        23
    natsji  
       2021-04-23 19:55:44 +08:00 via Android
    natsji
        24
    natsji  
       2021-04-23 19:58:03 +08:00 via Android
    shuntdown42
        25
    shuntdown42  
       2021-04-23 20:35:09 +08:00
    反反广告拦截规则
    ad-edentw.txt:合并自 Adblock Warning Removal List 、ABP filters 、anti-adblock-killer-filters
    raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt
    IvanLi127
        26
    IvanLi127  
       2021-04-23 20:41:24 +08:00 via Android
    可以,但是现在广告拦截不只是阻断接口的访问
    psllll
        27
    psllll  
       2021-04-23 21:54:06 +08:00
    把广告做进正常的内容,参考动漫疯
    dream7758522
        28
    dream7758522  
       2021-04-23 22:28:24 +08:00 via Android
    优酷爱奇艺不是已经实现了吗?开了过滤,直接不放视频了,一个大黑框提示关闭过滤
    iseki
        29
    iseki  
       2021-04-24 00:50:31 +08:00
    这都是道高一尺魔高一丈的东西,你这么设计接口赶明人家反广告工具上 json path 信不信(
    tia
        30
    tia  
       2021-04-24 01:55:37 +08:00
    你除非拿出和对方一样规模的团队 https://github.com/gorhill/uBlock
    nvkou
        31
    nvkou  
       2021-04-24 03:13:21 +08:00 via Android
    学学游戏。看完广告获取令牌从而让用户主动走完流程。
    MaiKuraki
        32
    MaiKuraki  
       2021-04-24 07:26:47 +08:00
    好像有点儿难反。建议起诉开发广告拦截的
    xingshu1990
        33
    xingshu1990  
       2021-04-24 08:29:56 +08:00
    学学 youtube 学学泰国的广告,学学霓虹国的广告。
    国内的广告制造焦虑太明显,贩卖焦虑太明显。特别是近些年的在线教育,培养了太多的焦虑的父母,造就了太多的鸡娃。
    xingshu1990
        34
    xingshu1990  
       2021-04-24 08:32:10 +08:00
    目的性太强烈,功利性太明显的广告,现在的大众都不想看。反而泰国好玩的广告,我可能连电视剧都不看了。
    yyyb
        35
    yyyb  
       2021-04-24 09:38:14 +08:00   ❤️ 2
    一天到晚琢磨怎么反广告拦截不如提升一下广告质量和投放方法,你们还想强制用户吃屎不行?
    yyyb
        36
    yyyb  
       2021-04-24 09:42:23 +08:00   ❤️ 1
    @MaiKuraki 建议立法,强制用户看广告,不看的一律终身监禁
    gamexg
        37
    gamexg  
       2021-04-24 10:04:08 +08:00
    这个根本没难度
    第一,一般是第三方的广告平台,直接屏蔽广告平台域名完事,你没办法去改平台域名,如果上自己的反代,小心被当作作弊。
    第二,即使加载处无法屏蔽,也可以从 DOM 处屏蔽。我记得有个网站广告 DOM 没任何 id css 等标记,但是当时一样按位置解决了。

    靠谱的方法如上面讲的,js 探测,如果发现屏蔽广告就警告。但是要注意,探测的 js 别一样被人屏蔽了。
    不过这个只能对抗通用过滤,如果专门针对某个网站的油猴脚本,一样难以解决。因为 DOM 的方法可以被替换。
    InuYasha1987
        38
    InuYasha1987  
       2021-04-24 10:11:18 +08:00 via Android
    @honeycomb 就从那时候起我不看 cnbeta 了
    newmlp
        39
    newmlp  
       2021-04-24 10:21:15 +08:00
    这个反广告拦截实际上没啥意义,人家真不想看你广告你非要让人家看到,能带来什么收益呢?而且还要投入人力时间
    Cu635
        40
    Cu635  
       2021-04-24 10:43:42 +08:00
    反广告拦截?
    注意在接广告的时候不要接那种恶心人的广告,注意筛选高质量广告。
    hui314
        41
    hui314  
       2021-04-24 17:10:31 +08:00
    楼主应该是想说把接口做成类似 RPC 的形式,这样可以达到“设计一个你不能屏蔽我网站的接口不然你就不能正常使用我的网站”的意图。
    但是我可以 block 网站的某个元素。
    lichdkimba
        42
    lichdkimba  
       2021-04-24 19:35:36 +08:00
    @wpyfawkes 达盖尔那个太低级了。。。。就是检测没显示就隐藏内容。。很容易写个小脚本解决
    domodomo
        43
    domodomo  
       2021-04-25 11:32:57 +08:00
    你不如干脆上街抢劫算了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   903 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:12 · PVG 05:12 · LAX 13:12 · JFK 16:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.