SwitchyOmega icon indicating copy to clipboard operation
SwitchyOmega copied to clipboard

希望能提供通过第三方服务器同步规则列表的功能

Open mopperwhite opened this issue 6 years ago • 10 comments

原因如下:

  1. 规则过大导致无法使用Google账户同步
  2. 有多个Chrome用户,但希望能使用同一个列表
  3. 可以自行指定服务器的话用localhost就可以在本机的不同用户之间同步了

大致想法: 通过AJAX把AES加密过的规则列表上传到服务器 每次启动浏览器(或者手动检查)的时候检查服务器上的最后更新时间,如果服务器的更新就下载下来,在本地合并,再上传

mopperwhite avatar Feb 21 '18 07:02 mopperwhite

那么第三方服务器在哪里呢??

celeron533 avatar Feb 21 '18 11:02 celeron533

@celeron533 提供一个开源的服务器端大家自己架? 如果服务器只能接收到加密数据的话大概是安全的…… 为了防止中间人攻击在初次设置的时候同步一下服务器公钥,每次下载下来验证一下签名 为了减少依赖可以使用sqlite当数据库 大概这样

mopperwhite avatar Feb 21 '18 15:02 mopperwhite

抱歉,上传规则列表到服务器,或者做一个开源的服务端之类的太偏离本项目的主题了,估计是不可能做了。配置同步功能本来也只是一个比较边缘的功能,但是因为 Chrome 本身比较好做同步所以就做了,但更多的应该不会再加了,这个之前也讨论过。引入一个 AES 加密库之类的恐怕也……

要在不做太多的前提下解决您的问题,我觉得可以另外做个客户端(比如用 Node.js + Express),那个客户端在 HTTP 协议下提供规则列表明文,然后本地运行那个客户端再把 SwitchyOmega 里的规则列表网址设置成 localhost:8080 之类的。这样可以使用任何方式来获取规则列表正文(比如从远端服务器下载,甚至直接读取一个 Dropbox 同步的本地文件),不用受到扩展的权限之类的限制。等 #534 实现了,那个客户端也可以通过 Web hook 获取到选项,从而可以实现把规则列表的正文上传到服务器/存储到文件之类的。

FelisCatus avatar Feb 23 '18 01:02 FelisCatus

@FelisCatus 好的…… 我想加上web hook的话应该足以解决我的问题了 非常感谢

mopperwhite avatar Feb 24 '18 03:02 mopperwhite

其实可以考虑同步到一个对象存储上去?就算没有加密,大多数对象存储也是足够安全的。用户可以在所有支持S3的对象存储中选一个(比如阿里云,七牛云,wasabi等等),支付非常少量的费用(甚至免费),做到无限存储空间的同步

我也很需要这个功能,我试试看能不能做出来

KevinWang15 avatar Jan 29 '22 09:01 KevinWang15

我这边有个非常非常粗糙的PoC,效果还行: https://github.com/KevinWang15/SwitchyOmega/commits/s3-backup

cc @FelisCatus 要不要考虑一下…

PoC使用说明:
1. 去阿里云OSS或者其他S3对象存储提供商,创建一个对象存储bucket(读写权限设置为 私有;可以开通版本控制和生命周期管理功能,以获得历史版本的功能,并且自动在若干天后删除历史版本)
2. 设置bucket授权,以阿里云为例,需要创建一个RAM子账号,在Bucket授权策略中给这个RAM子账号授予读写权限。记录下RAM子账号的AccessKey ID和AccessKey Secret
3. 编译此fork并在Chrome里Load unpacked。 插件 Details → Inspect Views → Background,运行
localStorage["s3BackupSpec"] = JSON.stringify({
  "endpoint": "https://oss-cn-beijing.aliyuncs.com",
  "bucket": "your-bucket-name",
  "access_key_id": "RAM子账号的AccessKey ID",
  "secret_access_key": "RAM子账号的AccessKey Secret"
})
4. 完成,目前的行为是:每次启动浏览器时会加载备份、每隔6小时会加载备份、每次写配置时会上传备份

最麻烦的可能是写一篇文档告诉用户怎么去开通对象存储,有这种需求的,硬核用户偏多,有希望搞定? 或者可以(天马行空地想一想)再做一个网站,用户去那个网站上交1元/月,那个网站背后去阿里云创建一个容量限制为10MB的bucket,把对象存储的访问信息发给用户,或者一键导入插件… 备份的问题可能就能解决了

KevinWang15 avatar Jan 30 '22 07:01 KevinWang15

作者不见很久了。要考虑部署和访问难度 安全和隐私等方面。你可以做fork。 另外,如果订阅的规则不展开,不是太容易达到浏览器同步上限。

yfdyh000 avatar Jan 30 '22 07:01 yfdyh000

要考虑部署和访问难度 安全和隐私等方面

安全性和隐私 我猜还可以,做对象存储的厂商应该都能保证的,实在不放心,我们配置备份的时候,要求用户设置个密码,AES加密一下

部署难度的话,我们倒是不用部署额外的服务,只是去阿里云等注册账号、开通bucket,对于普通用户比较难

如果做慈善,就免费给每个用户10MB的空间,让他们用我们的bucket就行了,然后提醒他们捐点款…


不过现在作者不见了,这个下一步怎么做,很难有人说了算啊,哈哈

现在我自己建了bucket、使用了自己的fork,我的需求算是解决了,让这个给更多人用就比较困难


如果订阅的规则不展开,不是太容易达到浏览器同步上限。

这个我的确没太研究,但估计这块不太好改,backwards compatibility会破坏?

我在S3的备份,json文件的确只有30多KB,还没到100KB的限制

KevinWang15 avatar Jan 30 '22 08:01 KevinWang15

不加密肯定检测到,国内封,违反服务条款。混淆不长久和不利用户安全,用户定密会有点复杂。弄平台搞捐赠就更刑了。

用国内能访问的PasteMe/gist类服务做同步,应该就足够,但哪个能用我没想起来。

都用fork版或者加检测标记就可以。目前是规则列表展开存储导致超出浏览器限制。

yfdyh000 avatar Jan 30 '22 08:01 yfdyh000

好吧… 这东西这么敏感的么 😅😅 我就是用它配置GitHub等平时工作会用到的网站,因为开全局又不合适(公司内部网站会打不开),试下来浏览器端做代理规则匹配的方案最好(所以在我的认识中这是个很正常的工具,完全没往”违反服务条款“想)

不过的确,大家的用法都不一样,帮大家存储可能比较敏感的数据,风险是大了一些。 虽然我相信对象存储服务提供商跟百度网盘不一样,不会查你的内容,但谨慎一点总没错。 我加一点混淆进去吧,上传和下载S3的时候,使用一个hardcode的默认密码对称加密/解密,用户可以改这个密码


Update: 加密加好了,成功吓到我了

KevinWang15 avatar Jan 30 '22 08:01 KevinWang15