? ? 文章

Policeman 扩展简单教程与规则集的使用(Noscript同类扩展)

Policeman 是火狐的扩展,它可以让用户精确地控制浏览器(注意是整个浏览器,而不仅仅是网页)的跨站点请求(Cross-site request,简称XSS)。那什么是跨站点请求?跨站点请求,正如字面表达的意思一样,是浏览器在访问某个网站时,网站向不同网站发出的网络请求,只 要是请求的域名与该网站的域名不同都归属于第三方网站,因此用户可以拿回站点网络请求的掌控权,通过创建用户规则来决定哪些放行,哪些拒绝,从而保护隐私 安全或者去除网页广告。在火狐扩展中,有类似的功能的扩展还有RequestPolicy、NoScript及uBlock。更多介绍以及类似扩展之间的比较可参见:Policeman 扩展介绍与汉化

总的来说,相较于其它同类扩展,Policeman入门和操作简单,针对单个站点的请求的内容类型实现精确的控制,支持基于mini-language语言的规则集编写。在使用中,建议搭配ABP自定义规则针对漏网的特定网址和元素处理。比如在博主只使用ABP时,订阅精简版推荐过滤规则加自定义规则时达到700KB,还可能增加,而自从两者结合以后ABP规则目前才不到10KB,Policeman的规则也只是十几KB,就可以实现安全清爽的网页浏览。

Policeman是开源项目,基于GPL v3协议,由futpib创建并维护。

项目主页:https://github.com/futpib/policeman

扩展主页:https://addons.mozilla.org/en-us/firefox/policeman

WIKI和讨论帮助主题都可以在项目主页找到。

目前帮助文档尚有待于编写完善,不能及时回复用户的问题,这也是其不足之处。目前有个Bug是规则集中的单独的对象内容类型处理规则无效,只能通过界面添加才起效。

敬告:该扩展安装后,默认的策略是阻止第三方域名,也就是说需自己手动交互和定制规则才能获得良好的网页体验,并不是拿来什么都不做就可以直接很好地使 用,毕竟不像ABP有专人维护和更新规则。故而,如果你连动手操作都不想,又不想熟悉设置和不仔细点看帖子的话,建议以下的内容可以忽视不用看了,可能会 浪费你的时间,同时ABP是你的更佳选择!

本文的适用范围:

Firefox:44以下版本(建议Fx43.0.4),注意,44+会有些小问题(与Fx的接口有关)。不兼容苍月浏览器(PaleMoon)

Policeman:0.19 pre4(最下方已提供了我汉化的扩展以及部分规则集)

URI和内容类型

URI[维基百科:统一资源标识符]是一个用于标识某一互联网资源名称的字符串,我们常说的URL是其常见的一种形式,比如http、ftp等协议常见地址,是URI的一个子集,比如包括websocket、mailto等协议,其组成如下图所示,各属性的定义请自行参考[MDN:nsIURI]。

175149csx0jflpw9edxzj0.jpg.thumb_
Policeman就是通过处理URI来实现放行或拦截网络请求资源,网络请求资源内容类型可以分为以下几种:

任何: _ANY_,一般可省略,表示匹配任何请求

图片: IMAGE,表示图片资源

媒体: MEDIA,表示音频或视频资源

样式表: STYLESHEET,表示样式表,通常与网页的布局显示有关

字体: FONT,表示字体资源,通常是网页中用到的特殊字体

脚本: SCRIPT,表示脚本,主要是实现网站的功能

对象: OBJECT,对应API中定义的对象或对象子请求,视频网站常用到

框架:SUBDOCUMENT,通常是HTML框架,比如弹出的下载框之类

网页:DOCUMENT,新打开的网页,与框架的区别类似于无模式和模式对话框的区别,重定向也属于网页的一种

XML请求:XMLHTTPREQUEST,一般是指脚本的一种请求机制

WebSockets:WEBSOCKET,常用于实现作脚本与服务器的通讯,通常是与建立与服务器的持续链接而不是单次的请求,比如度娘盘就会用到

文档类型定义:DTD,文档类型定义的请求,基本没遇到过~~

Pings:PING,点击<a ping=”…”>链接时发送的请求

未分类:OTHER,上面归类中未提到的都归入此类

规则类型

Policeman的规则类型主要分为两大类,一类是用户通过UI添加的规则,又可分为临时规则和永久规则;另一类是高级规则集。

临时规则:通过工具栏UI添加的规则,只在当前浏览器进程生效,重启浏览器时,规则将被清空,只能处理host并且是从右至左逐级增大范围。

永久规则:同临时规则,区别在于规则会被保存在Firefox配置目录下的配置文件prefs.js中可以复用,并能导出和导入规则(json格式文件)。但是优先级默认要低于临时规则,也就是对于同一规则,临时规则会先处理并覆盖永久规则。

这两种规则可以相互转化,规则的添加比较简单,直接通过工具栏的界面就可以实现,编辑可以进入设置->自定义规则中进行编辑更改和删除处理。通常临时规则用于测试排查用,没有什么问题后可以根据个人的情况是否将规则转为永久规则或者写入规则集。

细心的用户应该会发现,它们只能处理URI中的host段,相当于在域名的左侧使用了通配符的hosts,对于域名还好说,但是处理IP地址怎么办呢?毕 竟对于某个站点的IP地址一般会在后两段变化,前两段一般是固定的,也就是遵循从左到右,而host的处理是从右至左的,显然是矛盾的。这就要引出高级规 则集了,规则集可以处理完整的URI而不仅仅是其中的host段。

高级规则集:高级规则集的语法,作者并没有相关的文档说明,只是零星给出了部分的例子。规则集支持正则表达式和通配符(只支持*),上面两种规则可以誊写 固化为规则集。规则集的路径为Firefox配置目录下的”policeman/rulesets”中。注意,规则集需要导入后才会被加载(写入到 prefs.js配置文件中),直接放入该文件夹下是不会自动扫描加载的。另外一个不人性化的情形是,如果编写的规则有问题,那出错的规则集会被删除…… 所以编写后不要急着关闭文件而是保持在文本编辑器中,无误和生效后再关闭。敬告强迫症患者,导入的规则集会被自动加上一串字符,这个可以在 prefs.js中编辑,保持两者一致即可。

规则集的用法

规则集的文档作者还未提供,故而好些参数我也不清楚,不过从作者提供的例子以及前面小节提到的URI就可以处理大部分的情况了,这里也只以我提供的规则用到的为例进行说明。

web -> web: 网络到网络的请求,一般就是指浏览网页,比如http->https,https->ftp等等,总而言之,处理网页请求时用这个就没错多了

ACCEPT或REJECT:动作类型,Policeman中的两种预设动作,即放行请求或阻止请求

[contentType]:网页请求资源的内容类型,具体请参看上面小节的内容,比如允许请求所有的样式表,可以写成

web -> web:
[contentType] STYLESHEET: ACCEPT
[path]:URI 中的path段,就是指域名后面的内容,比如”dxdragon.ga/example/ads/banner.jpg”,其中的”/example /ads/banner.jpg”就是path了,这个可以用来处理包含特定字符串的请求,如/ads/一般是广告投放,等同于ABP规则”*/ads /”,可以写成

web -> web:
[path]-> * "/ads/" *: REJECT
[spec]:用于完整的URI匹配,即一条完整的链接,比如只阻止或放行某一链接(特殊白名单或黑名单)。不过,通常情况下,建议对于黑名单的路径和完整URI的处理使用ABP来处理。

扩展的规则集的策略有两种,一种是选择放行所有请求然后编制黑名单,另一种是阻止所有请求然后编制白名单。第一种显然不是我们需要的,因为如果选择这种策 略的话没必要用这个扩展,直接用有专门规则维护的ABP就行了。扩展默认的也是第二种策略,并且默认阻止第三方内容(非严格)。接下来就是各规则的优先级 问题了,Policeman的优先级是居前优先的,也就是先遇到先处理并忽略再次遇到的同种作用的规则,所以合理安排优先级顺序很重要,举个比较使用的例 子,关于排除域名中某一特殊的字符串,比如在去除腾讯视频播放的广告,需要阻止”*.l.qq.com”,但是同时阻止 了”livew.l.qq.com”,会有倒计时提示,那处理方法可以选择正则表达式”/\w*[^w]\b\.\l\.qq\.com/”,显然这个比 较复杂而且有效率的问题,那更简单的方法是,分拆为两条按优先级撰写的规则:”livew.l.qq.com: ACCEPT”和”*.l.qq.com: REJECT”就可以解决。
另外,我们在使用规则集时,最好分门别类,比如按功能分类,比如例外白名单,阻止的黑名单等等,同一个规则集中最好是同一种动作类型的规则,这样规则编写比较清晰和利于排查。以我自己的为例,我自己写了:

exception_domains_whitelist:设置全局的例外白名单,比如对于有反广告提示的网站,一些验证码和评论回复系统,需要特别放行在其它网站是广告而这里不能阻止,还有功能性的修复等
reject_domains_blacklist_same_site:阻止来之同一站点的特殊域名,比如访问baidu.com中的hm.baidu.com等
allow_special_domains_whitelist:允许某些特殊的域名黑名单,因为网站实际上会请求其它域名来实现完整功能,比如youku.com要请求ykimg.com的内容等

各规则集的优先顺序如下图所示。一般情况下,参照我下面提供的规则就可以写自己的规则了。

175152ct5t952eq19x7ii9.jpg.thumb_
使用上面的规则后,以优酷为例,达到的效果如下:

175154nspc2na0p53nk52w.jpg.thumb_
常见问题

1. 一般要允许那些域名呢?

通常情况下,通过界面添加临时规则进行测试,对于网页的排版一般与样式表、脚本和图片有关,有时也有框架,功能性一般是与脚本有关,当然各自还有嵌套调用 的情况,所以最重要的方法就是测试和灵活运用挂起功能。一般情况下,特别注意含有img、cdn、api和static字样的域名,还有末尾含有 jquery的链接。

2. 视频网站不能播放视频怎么办?

不能播放视频常常是因为没有放行播放器对象或视频资源请求对象,排查的话,在界面的目标中选中”全部域”,然后再右侧查看已阻止的对象,放行并测试即可。 另外,对于IP地址的视频资源请求的,可以参照我的规则集中关于视频网站的处理,在编写站点规则集,或者直接全局允许IP地址的请求亦可。

3. 放行了部分内容还是不行呢?

这个是因为许多资源之间存在嵌套调用的情况,那怎么知道是否有嵌套调用呢?很简单,挂起扩展然后看是不是多出了更多资源链接。再一步步测试排查。

4. 界面只能处理某一种内容类型情况,我要处理某一具体链接怎么办?

强烈建议处理特殊链接搭配ABP进行精准匹配处理。当然也可以在规则集中用[path]、[spec]等来处理,不过不推荐。

5. 单击某个链接后一闪而过是怎么回事?

这种情况是,阻止了该网站的网页(重定向)请求,强烈建议对于链接直接用鼠标拖拽的方式打开。如果你习惯了点击操作的话,那你可以在我提供的 allow_special_domains_whitelist规则集中,第一条允许所有所有样式表的规则中再加上DOCUMENT参数即可,即完整的 写法是:

web -> web:   
[contentType] (STYLESHEET|DOCUMENT): ACCEPT

下载地址:

提供了常见网站的规则集以及配合的ABP规则、Policeman汉化扩展,你只需要安装ABP和 Policeman扩展,按照下载文件中的使用说明,放置规则集,复制规则到ABP,复制配置文件到user.js或prefs.js,重启浏览器即可, 不需要再订阅其他规则了,你可以测试下常见的视频网站。当然,如果你需要制定规则,参照我的规则集的写法就可以了。

作者:dxdragon

【UsersCloud下载】Policeman 汉化扩展

【百度网盘下载】http://pan.baidu.com/s/1dEee4DF 密码: iw4h

原文链接:,转发请注明来源!
0 0

发表评论