如何反广告拦截?

2021-04-23 12:30:53 +08:00
 wunonglin

例如:www.bilibili.com

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

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

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

4595 次点击
所在节点    问与答
43 条回复
crclz
2021-04-23 12:49:07 +08:00
不是很清楚你的问题。

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

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

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

何必互相伤害呢,装了广告拦截的用户几乎都不是广告的受众,带不来什么收益,广告屏蔽对双方都好……
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
2021-04-23 13:16:16 +08:00
前后端不分离 可以直接没有广告接口啊。。。
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
2021-04-23 13:45:00 +08:00
网站运营方这么搞,成本太高,除非自己就是广告渠道商。
wunonglin
2021-04-23 13:46:48 +08:00
@oott123 #5
@lichdkimba #7
不一定是网页、例如其他设备

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


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

广告有没有获取、获取后有没有渲染、渲染后有没有被屏蔽、检查是否渲染和屏蔽代码 有没有被屏蔽。
retanoj
2021-04-23 16:25:06 +08:00
你咋绕过的人家,人家就咋绕过的你
除非广告不是广告,广告就是正常的内容
X-Force
2021-04-23 16:44:53 +08:00
人家直接操作 CSS 或 DOM 移除相关内容就行,管你是什么接口获取的内容。
wpyfawkes
2021-04-23 17:14:06 +08:00
我记得达尔盖的旗帜检测到广告被屏蔽就不会显示图片,楼主可以去研究下.😆
wunonglin
2021-04-23 17:24:53 +08:00
@X-Force #13 java 、swift 、qt 也可以么
joesonw
2021-04-23 17:50:40 +08:00
1,获取路径也要证书解的
2,屏蔽广告是浏览器插件,可以获取你所有请求信息(授权情况下),没有证书不证书一说。
honeycomb
2021-04-23 17:59:09 +08:00
@wunonglin 实际上很多网页就是这么做的,把 html 元素的 id/class 标记成随机数,这样 adblocker 就很难去拦截它。
为此 adblocker 发展出了更复杂的拦截功能。
anti-adblock 也类似,可以用相同的 anti-anti-adblock 去反制。
app 的 api 可以用代理实施中间人攻击,对付方法也有,用 tls 证书绑定,非越狱 /root 无解
honeycomb
2021-04-23 18:01:06 +08:00
前几年 cnbeta 曾经和 adblocker 打过一架,几分钟更新一次前端代码,后来发现搞不过。
现在它就把广告放到信息流里不和正常信息区分了,但是 adblocker 还是能认出来,因为它用了广告联盟的链接
wunonglin
2021-04-23 18:13:21 +08:00
@honeycomb #18 原来这么精彩。领教了
locoz
2021-04-23 18:26:12 +08:00
其实没啥卵用,无非就是处理成本的问题。你要搞特殊加载方式,别人就直接用透明代理检测内容做拦截,或者直接就 hook 你程序干掉广告内容的显示,实在不行就压根不用你的东西...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/772685

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX