#爱不爱#
从去除侵扰性广告的角度,我们有哪些可行的解决方案?
————————
此内容授权转载自“小众”;爱富科技精选推送。
作者吴
来源:少数民族
广告收入占谷歌利润的大部分,但谷歌在自己的浏览器Chrome中加入了广告移除功能,默认开启。
这种做法其实并不矛盾——打开Chrome帮助页面我们可以看到,谷歌的屏蔽措施主要是针对侵入性广告,包括:
过度广告
广告包含令人讨厌的内容,如闪烁的图片或自动播放音频。
广告屏蔽了网页的内容
这种广告不仅难以达到预期的宣传效果,还会导致部分用户干脆屏蔽页面上的所有广告,这对于依靠广告收入维持免费内容的创作者来说无疑是一个不小的打击;对于普通用户来说,侵入式广告也会影响网页内容的浏览体验,更不用说加载广告带来的设备性能和数据流量开销了。那么从去除侵扰性广告的角度来说,我们有哪些可行的解决方案呢?
桌面浏览器扩展
浏览器作为我们查看网页的主要载体,自然是广告投放的重要阵地,所以浏览器拓展自然成为我们的首选。
Adblock Plus是平台扩展商店中下载量最大的广告删除扩展。早年叫Adblock,是火狐上的开源项目。那时候它的功能远没有现在强大。
2004年,Adblock迎来了0.5版本的更新,核心功能逐渐成型。有了这个插件,用户不仅可以隐藏元素,还可以直接拦截广告数据的下载,同时支持订阅规则。这些特性使得Adblock成为当时最流行的广告移除扩展。之后Adblock开发团队经历了人员变动,一名成员退出开发,其他成员负责继续维护,2005年衍生出现在的Adblock Plus。
然后随着2008年Chrome的诞生,也出现了针对Chrome的Adblock。虽然同名,但和当时的Adblock和现在的Adblock Plus不一样。现在我们可以看到,虽然Adblock像是iPhone和iPhone Plus系列的双版,但实际上Adblock Plus才是真正的老牌劲旅。Adblock Plus的“定期订阅”功能也被其他竞品学习和吸收,成为当今业界的标配。
规则是什么?简而言之,当浏览器加载网页时,网页中的元素会以请求的形式请求连接到被请求的服务器进行下载,而广告移除扩展会根据预先设置的规则检查每个请求,当检查到与广告相关的请求时,会将其拦截,以阻止浏览器加载广告元素。
所以,除了扩展,去广告化的效果也很大程度上取决于我们扩展订阅的规则集。对于中国用户,我们推荐以下规则:
EasyList:著名的Easy List,主要针对英文语言,适合经常浏览外网的用户。
中国榜:也是主要针对国内网站,对一些视频网站有奇效。
易榜中国:也是针对国内网站,覆盖范围更广,但偶尔误杀。
轻松隐私:一些追踪器可以被屏蔽,以实现隐私保护。
需要注意的是,除了保持规则定期更新之外,订阅规则的数量也不能太多,因为太多会显著影响网页的加载速度。另外,虽然老品牌Adblock Plus听起来确实不错,但也未必是最佳选择。相比之下,免费、开源、跨平台的浏览器扩展uBlock Origin,不仅包含了Adblock Plus的所有功能并支持定期订阅,而且经过测试,其内存和CPU占用率更低。
桌面客户端
相比只能在浏览器中发挥作用的浏览器扩展,客户端的去广告形式具有更高的权限,一方面使其功能更强大,适用范围更广,但另一方面也带来了一些安全隐患,在选择时要特别注意。一个
鉴于除广告软件的功能和原理都差不多,这里以Windows端的Adguard为例。
Adguard声称其三个主要的广告机制是请求阻止、页面代码过滤和CSS注入和JavaScript。请求阻塞的工作原理和浏览器扩展一样,这里就不赘述了。在这里,我将主要谈谈后两种方案:
页面代码过滤:在浏览器加载网页之前,Adguard会对网页代码进行过滤,根据规则删除包含广告的网页代码,使浏览器不会加载这些元素。与扩展“后知”和隐藏阻塞请求后生成的空等繁琐操作相比,该方法理论上比扩展工作法更高效。
CSS注入和JavaScript:有时候网页中的元素被Javascript动态嵌入网页中,不需要加载额外的资源,所以Adguard也需要对这些内容进行额外的处理;另一个是CSS,一种决定网页渲染风格的语言。CSS可以决定网页上元素的呈现方式,包括但不限于颜色、字体、位置甚至网页元素的可见性。Adguard可以在网页中注入自己的CSS代码和Javascript,达到更彻底的广告效果。
这里需要注意的是,Adguard在本文中多次出现的一个重要原因是:内置规则全面,可以说是开箱即用。在选择打开哪些规则(在Adguard中称为“过滤器”)时,我们需要注意根据我们访问的网站、所处的地区、运营平台和个人要求,打开尽可能少的规则。
在不导入第三方规则的情况下,我们建议中国用户打开以下规则:
“广告拦截”中的Easylist
“烦人”中的Adguard烦人广告过滤器
“特定语言”中的Easylist中国、CJX烦恼列表和xinggsf
当然,如果你经常和其他网络厮混,也可以根据自己的需求适度额外开放其他规则。
Adguard的桌面客户端另一个有趣的功能是“扩展”,其实就是我们平时在浏览器中使用的“脚本”。本质上就是用Javascript语言编写的一串小代码,可以在特定的网站上实现特定的功能。在Windows和MacOS上,Adguard内置了三个官方脚本:
Adguard assistant:用于直接管理网页的过滤过程。
Ad Hoc Extra:当基于过滤器的方法不能完全广告时使用的复杂场景。
弹出拦截器:顾名思义,摆脱弹出窗口是最讨厌的广告形式。还记得澳门赌场的热心庄家吗?
这个功能确实有相当大的潜力,但是不用担心,接下来要提到的Android端才是这个功能真正大放异彩的地方。
安卓端
Android平台的很多浏览器(比如Via、Firefox Focus)都有自己的去广告功能,但是不能导入规则,灵活性比较低。考虑到广告的实际能力,如果你愿意离开Chrome的“温柔乡”,那么你在广告方面还有这些更强的选择:
Kiwi、Yandex和Firefox
前两个基于chrome的浏览器满足了一个所有Android版Chrome用户都向往已久的功能:在移动端安装使用Chrome Web Store中的浏览器扩展,所以在手机上安装uBlock Origin这样的去广告插件是完全可以的,桌面扩展的功能基本都可以使用。
Firefox for Android也原生支持安装扩展,但扩展数量比桌面少,想效仿在桌面安装十几个扩展的朋友可能要失望了。好在我们可以在移动端安装去广告扩展的同时,导入规则进行手动拦截;在一些广告特别泛滥的情况下,我们也可以通过扩展来禁用界面中的Javascript,以达到更彻底的消除广告的效果,比如Chrome上的Quick Javascript Switcher和Firefox上的Noscript Security Suite但这是一剂可能影响网页正常使用的猛药。请酌情使用。
另外,Adguard内容拦截器也是安卓平台上为浏览器做广告的一种方式,但是需要浏览器支持内容拦截技术。目前只能使用Yandex浏览器和三星浏览器。但如果这两款浏览器的用户真的可以考虑使用,Yandex用户可以享受到更适合手机的页面,对于不支持安装扩展的三星浏览器用户来说更是福音。
ACB的用法和浏览器扩展基本相同。ACB的主要功能是关注过滤器(即规则)。当内置规则少于Adguard对Android的需求时,可以自行添加。但是在移动端操作的体验远胜于在紧凑的扩展设置界面里修修补补。
全局主机方案
什么是主机?Hosts是每个设备上的一个系统文件,它的工作原理也很容易理解:它将常见的网站域名与其IP相关联。当我们输入一个域名时,系统会先在Hosts文件中寻找对应的IP地址,如果找到了,就会立即打开。
所以,利用Hosts文件做广告的思路很清晰——我们可以编辑Hosts文件,将已知的广告服务器重定向到一个无效地址(一般是127.0.0.1)来实现广告。
例如,我们可以将这一行添加到Hosts文件中。
127 . 0 . 0 . 1 adsites.com
这样,我们就把adsites.com的网站重定向到了本地IP地址,达到了广告的效果。但在Android设备上,Hosts文件位于/system/etc/hosts目录下,修改后可能会影响正常的OTA更新。所以我们最好在不改变系统分区的情况下,使用Magisk模块修改Hosts文件。
这个功能甚至得到了Magisk作者的官方支持,只需点击Magisk管理器设置中的无系统主机选项即可。
当我们准备好了,我们可以安全地更换主机。在Android上,我们推荐使用Adaway,一种老式的主机广告设备。授予Root权限后,只需添加所需的主机源。
推荐的主机来源:
YHosts:相当老派的广告主持人。
Neohosts:国内屏蔽挖矿统计JS/常见下载劫持/百度家桶全天候定位记录等。
盛达净化:由盛达净化开发商维护的主机,主要面向国内视频网站。
需要注意的是:
非root用户可以借助Android自带的网络框架接口修改主机。具体步骤请自行查看。
主机和规则太多会影响网页的加载速度,所以要慎重使用。
一些细心的读者可能会发现,像uBlock Origin这样的浏览器扩展和Adaway这样使用主机做广告的应用都需要“规则”。它们可以混合吗?
答案是否定的,uBlock Origin等扩展的“订阅规则”的特性来自于初始的Adblock(见上一段),它有自己独特的语法,主机由IP地址和web地址组成。两种格式不能混用,可以转换成曲线救国,但意义不大。已经有很多维护规则了,可以直接订阅对应的规则。
Android版Adguard
相比浏览器扩展,Adguard for Android可以利用Android系统的几个基本网络框架进行流量过滤,最终达到去除广告的目的。流量过滤不向任何服务器发送用户数据,通常不需要Root权限。
在Adguard中,我们可以通过开启DNS过滤和HTTPS过滤来增强去广告的效果。
先说DNS。
承接以上对主机的查询,当我们输入一个域名时,会先查询本地主机中是否有与该域名对应的IP,如果没有,则查询远程DNS服务器(因此,DNS也被形象地称为“网络电话簿”)。DNS广告删除将过滤广告的过程放在DNS服务器上。
我们还可以通过替换那些可以实现移除广告等复杂功能的DNS,来移除一些广告,比如Adguard的DNS 176.103.130.130。但据实测,在mainland China使用Adguard的DNS后,网页加载速度会明显变慢。请根据自身情况选择。动手能力强的读者也可以考虑在自己的服务器上设置Adguard Home(https://beta.sspai.com/post/52813)。
Adguard的一个独特之处在于,开启DNS过滤后,可以在不改变DNS的情况下达到广告的效果。具体实现原理是在请求到达DNS之前进行拦截,从而达到去广告的效果。
然后是HTTPS滤波。
我们知道HTPPS的链接是加密的。一般情况下,Adguard无法知道具体内容,因此无法过滤掉广告。Adguard给出的方法是通过安装证书来解密流量。遗憾的是,默认情况下,Adguard的证书属于用户证书,无法过滤Target API 24以上的app。幸运的是,对于Magisk用户来说,只需安装Move Certificates模块,将Adguad的证书转换为系统证书,这样所有app都可以通过Adguad过滤HTTPS流量。
考虑到过滤的过程客观上会拖慢加载速度,Adguard还提供了针对特定app的过滤开关。建议对app(微信、支付宝等)关闭过滤。)已经确认没有广告,过滤后会明显影响使用的。
另外,如前所述,Adguard支持在Android端安装脚本,而Adguard的脚本效果是全局的,也就是说支持包括Chrome在内的大部分手机浏览器。但是不同平台的不同操作方式也决定了有些脚本并不适合Android平台,比如浮动预览大图。
下面是一些可以在移动端使用的脚本,欢迎大家在评论中补充:
AC-Baidu:去掉无用的重定向,去掉百度广告,搜索结果分两栏显示等。
无尽谷歌:谷歌搜索结果自动翻页。
脚本安装可以去油腻叉、有型等知名脚本社区寻找更多玩法。安装脚本时,要再次提醒安全问题。恶意脚本会对设备造成不可估量的后果。不要安装未知来源的脚本。
iOS
早在iOS 9,苹果就发布了内容拦截器,这是一种可以集成到Safari中的App,具有解除广告拦截的功能。苹果对广告的立场也是如此明确,从其工作原理也可以看出其一直在宣传的隐私保护理念:拦截器并不知道用户的浏览历史和网页的具体内容;过滤过程也是在网页加载之前完成,在网页加载速度上比桌面端的浏览器扩展方案更快,就像之前的Adguard客户端一样。
在这里,还是推荐我们的老朋友Adguard。流行的1Blocker系列在2019年依然没有适合今日中国的内置规则,依然不支持订阅第三方规则,不在本文讨论范围内。
由于系统限制,iOS版Adguard的功能相比Android版Adguard缺失了很多,但还是有亮点的。
由于内容拦截器和Safari的集成,手动标记在Safari中特别方便。当你在网页上看到一条不符合规则的鱼,只要在分享单中找到Adguard,选择“屏蔽本页面元素”,点击“开始”,然后点击你要屏蔽的元素,点击最下面一栏的那个,自动跳转到Adguard保存。
贴心的是还可以点击图标预览屏蔽效果,整体体验堪比桌面。
“开”还是“关”?
好了,现在我们有了做广告的方法,但是应该怎么用呢?
删除所有广告?一些良心网站几乎完全靠广告收入维持,让用户继续免费浏览。
你是否按照Better Ads标准的标准,把那些用户体验差的广告去掉?这个想法听起来相对合理,但是有些产品就是靠大量的这种广告来转嫁产品成本,降低产品价格,让消费者买得起。
在目前流行的广告商业模式中,用户、广告主和网站所有者都在努力寻找一个最佳的平衡点,一个既能保证三方利益又不损害任何一方利益的平衡点,在这个过程中也采取了很多行动。但是,就像罗生门一样,不同立场的人自然有不同的看法。广告是否道德,总是很难有定论,甚至找不到所谓的权威来评判是非曲直。
Adguard显然不想陷在道德讨论中,于是在拦截器中加了一条“不要屏蔽有用的广告”,主要是不屏蔽除百度之外的搜索引擎获取的相关广告,以及网站中与网站本身相关的广告,这与Better Ads的主张还是有较大出入的,是罗生门的又一体现。
最坏的情况是,我们不需要被现成的规则所限制。几乎所有的广告屏蔽手段都可以手动添加白名单,把相当一部分权力交给用户。
现在,你想“打开”还是“关闭”?