您的足迹: activitypub-security

Mastodon/Misskey/Pleroma 的安全性?

这是本文档旧的修订版!


Mastodon/Misskey/Pleroma 的安全性?

在我接触到的中文泛长毛象社区中,经常可以看到关于长毛象以及(基于 ActivityPub 的)联邦宇宙的隐私以及安全性问题。在这里我尝试对一些相关讨论做一些总结。还在施工中,欢迎补充斧正~

安全性是什么?

这个问题讨论起来会没完没了。所以这里不打算对此做出说明。

各角色的权限

在这里我们看一下在不同设置下不同身份的人对我们信息的不同权限。下面假设没用屏蔽或是 Masotodon 安全模式(Secure Mode)。

没有账号的普通人

额,这个普通人可以注册账号……当然,在没有账号的情况下,TA 还是可以:

  • 查看你公开主页的活动(一般包括公开嘟文以及转发)、用户名、账号简介;
  • 如果你是 Mastodon 用户,并且站点开启了 RSS 功能:订阅你账号的 RSS;

这里需要提一句:技术上,没开安全模式的情况下,就算你所在实例有“公开主页只显示 10 条”等的功能,一个没有账号的普通人仍然可以看到你公开的所有嘟文。方法我不打算说,但可以说是非常简单。

有(可能许多)账号的普通人

注意,一个人可以有许多账号。

没有关注你

如果你没有开启关注审核,这个普通人可以随时关注你。总之,在还没关注时,TA 可以:

  • 看到你的非私信、非关注者可见的内容;
  • 向你发送信息(包括嘟文、点赞等等);

关注了你

  • 可以看到你的仅关注者可见的内容。

站长

本站站长

站长具有的权限是最大的。站长可以做到包括但不限于以下事情:

  • 修改本站账号的任何信息,乃至删号;
  • 查看本站账号的任何信息,包括私信、关注者可见的嘟文、邮件地址、IP 地址等;
  • 修改本站账号的浏览内容,如全站封禁外部账户(哪怕站内用户关注了此用户)、封禁某站点、过滤特定嘟文(Pleroma MRF);

总之,基本概括下来,站长能够访问、修改、删除个人用户在站点上留下来的任何信息。

外站站长

和上面的总结相同,站长能够访问、修改、删除个人用户在站点上留下来的任何信息;修改或删除这些信息只会影响到 TA 们站内用户的浏览内容。所以这里的问题就变成“我们会在外站上留下什么信息”了。

我们在外站留下的信息包括:

  • 我们给这个站点用户显式发送的所有内容,包括:发给对方的私信、@有对方的嘟文;
  • 我们给这个站点用户隐式发送的所有内容(对方站点有你的关注者时,你发的非私信内容都会发送给关注者,也包括你点的赞、互动和转发);
  • 我们的用户名、个人简介、头像;

我们的邮箱、IP 地址不会被外站知道。

屏蔽(Block)有什么作用?

屏蔽的作用可以分为站内和站外两方面。在站内,其作用便是把有关用户的内容(包括互动)全部屏蔽、取消关注等。而在站外,你所在站点会通知被屏蔽用户所在的站点,让其配合。如果这个站点是正常的,那么被屏蔽用户也将看不见你所发的内容、取消关注等等;但是,如果站点不是很正常,那么就有其它可能。(例如,有一个站点会将其收到的屏蔽信息公开发布出来。)

所以,屏蔽只针对一个人的一个号,还需要对方实例本身正常运作。

长毛象安全模式(Secure Mode)有什么作用?

所以屏蔽似乎没什么用,没有账号的普通人都可以对你的日常发布一览无余。安全模式主要想解决的是“尝试获取我们信息的到底是谁”这个问题。上面没有账号的普通人没有身份信息,但也可以访问一些数据,而安全模式使得任何访问都必须附上自己的身份信息(除网页访问外,这里的访问主要指的是使用 ActivityPub 这种协议在服务器之间的通讯)。

开启了安全模式的话,如果访问附上的身份信息没有欺骗我们的话,那么我们就可以实现更好的屏蔽。这一点的讨论经常会涉及转发的问题:我(a)所在实例 A 屏蔽了实例 B,实例 B 上有个用户 b 关注了实例 C 上的用户 c,那么用户 c 转发我(a)的嘟文会不会被 b 看到?实际上,一般来说,c 的“转发”实际上进行了如下操作:c 所在的实例 C 对实例 B 说“我转发了 https://AAA/aaa/123 这条链接的东西”,实例 B 顺着这个链接去向实例 A 要相应的内容。所以,B 要想知道真正的内容必须要经过 A,而安全模式使得我们知道来访者是 B ,这时屏蔽就可以起作用,这没有安全模式是做不到的。

但是,一个人可以有多个账号,这方面不多说,而身份信息的欺骗从技术上大概也只需要多一个没有被屏蔽的域名而已,只要实行的不是密不可透的白名单,那么还是会有风险。

注:这里的身份信息的校验大概过程是:1)B 访问 A 时说自己是 B,A 再去问 B “这个访问是不是你的呀”,得到回应(其实是密码学校验,不是回应)后,放行/屏蔽访问。但如果 B 说自己是 D,同时 B 有 D 的控制权,那么欺骗 A 从技术上说是可能的。(但这样子倒不如直接从 D 那里访问。)