Skip to content

动态过滤:规则语法

fang5566 edited this page Aug 21, 2024 · 16 revisions

返回"动态过滤"页面


规则语法

一条动态过滤规则由四个部分组成:源、目标、请求的类型和关键字,其中关键字用来明确对匹配了前三个部分的请求所进行的操作。

源 目标 类型 操作

有效的规则如下:

规则类型 目标 请求类型 操作
基于类型的 *
主机名
*
 
*
image
inline-script
1p-script
3p
3p-script
3p-frame
block
noop
allow
基于主机名的 *
主机名

主机名

*
block
noop
allow

源主机名始终对应的是从该网页地址提取出的主机名。

目标主机名则对应的是网页正在获取或尝试获取的远端资源地址的主机名。


提示:

在特定场景下 动态 URL 过滤在控制目标 URL 时会更精确。


一条规则始终会自动应用到源主机名的所有子域名以及目标主机名的所有子域名,除非被子域名里更精确的规则覆盖。

考虑到规则始终会应用到子域名,主机名部分就没必要添加通配符 *. 作为前缀。这么做是无效的,且会导致规则被丢弃。

默认 uBO 也会应用部分特殊的 behind-the-scene 范围的规则:

请求类型是指所获取的资源的类型。

对一条请求的操作包括屏蔽(block),允许(allow)或忽略(noop)。一条 noop 规则可以让动态过滤引擎忽略所匹配的网络请求,但静态过滤引擎(过滤规则列表)仍可对这些请求进行处理。

基于类型的规则

基于类型的规则适用于过滤网页特定类型的请求,目前动态过滤支持以下七种类型的网络请求:

  • *:所有类型的请求
  • image:图像
  • 3p:对网页来说是第三方的任意类型请求
  • inline-script:内联脚本标签,即嵌入到网页主文档的脚本
  • 1p-script:第一方脚本,即与当前页面域名相同的脚本
  • 3p-script:第三方脚本,即与当前页面域名不同的脚本
  • 3p-frame:第三方框架,即与当前页面域名不同的框架元素

这些规则既可以应用到所有网页,也可以只针对特定站点。例如使用下面这条规则屏蔽所有第三方框架就是一个保护浏览安全的好习惯:* * 3p-frame block。这条规则可以翻译为“全局屏蔽所有第三方框架”。

再比如 wired.com * image block 这条规则的意思是“在访问 wired.com 时屏蔽所有域名下的图像”。

请注意在基于类型的规则中,目标主机名始终要用 * 代替,表示“所有域名下的”。


基于主机名的规则

基于主机名的规则适用于根据网络资源的源地址(即提供资源的远端服务器)来过滤这些资源。它比基于类型的规则更精确,所以始终会覆盖基于类型的规则,即使一条网络请求同时匹配这两种类型规则。

在基于主机名的规则中,请求类型始终要用 * 代替,表示该规则适用于所有类型的请求。

例如:* disqus.com * block 表示“全局屏蔽所有连到 disqus.com 的请求”。

和基于类型的规则一样,基于主机名的规则也可以只针对特定的站点,例如:wired.com disqus.com * noop 这条规则表示“在访问 wired.com 时禁止屏蔽所有连到 disqus.com 的网络请求”。由于后面这条规则应用范围更精确,所以它会完全覆盖前面那条规则。


操作

对一条匹配的规则可进行以下三种操作:

  • block:屏蔽所匹配的网络请求。
    • block 规则会覆盖所有静态的例外规则。
    • 这样你可以 100% 确认可屏蔽,除非设置另一条规则来覆盖这条。
  • allow:允许所匹配的网络请求。
    • allow 规则会覆盖任何已有的静态和动态过滤屏蔽规则。
    • 这样有助于创建更精确的例外规则,并修复被某些静态规则破坏的页面。
  • noop:网络请求不在动态过滤处理范围内。
    • 禁止动态过滤规则生效,但不影响静态过滤规则生效。

uBlock 动态过滤规则对应静态规则的翻译列表

主机名&类型 本地动态过滤规则 本地静态规则
all: github.com * * block *$domain=github.com
images: github.com * image block *$image,domain=github.com
3rd-party: github.com * 3p block *$3p,domain=github.com
inline scripts: github.com * inline-script block ||github.com^$inline-script
1st-party scripts: github.com * 1p-script block ||github.com^$script,1p
3rd-party scripts: github.com * 3p-script block *$script,3p,domain=github.com
3rd-party frames: github.com * 3p-frame block *$subdocument,3p,domain=github.com
主机名&类型 全局动态过滤规则 全局静态规则
all: * * * block *
images: * * image block *$image
3rd-party: * * 3p block *$3p
inline scripts: * * inline-script block *$inline-script
1st-party scripts: * * 1p-script block *$script,1p
3rd-party scripts: * * 3p-script block *$script,3p
3rd-party frames: * * 3p-frame block *$subdocument,3p

来源于:How to make dynamic filters static?

Clone this wiki locally