Press "Enter" to skip to content

使「対多」避免被删库——PostgreSQL RSP/RLS 这件小事

没东西写了,写点还没在博客上发的流水账。

一个月前,一款偽中国語掲示板 APP——「対多」,横空出世,迅速火爆全网。开发者起初使用 firebase 作为后端,但 APP 过于火爆,打穿账单,开发者随后切换到了 supabase 以降低成本。

supabase 简单来说是 firebase 的代餐,提供 PostgreSQL实例+PostgREST+各语言SDK,以及一些封装好了的常用后端功能实现(如用户登录、用户注册等)。你可以通过 SDK 或 HTTP API 的方式执行来操作它的 PostgreSQL 数据库,直接把数据库当成后端。

反编译一下 APP 就能找到它的数据库地址。

本来只是觉得好玩然后想存它,结果一通鼓捣,发现它数据库的 Row Security Polices (或 Row Level Security) 有逻辑问题。


対多它主要有 posts 和 comments 两个表。

它设置了 RLS 规则,限制用户只能删除由自己创建的 post (if post.created_by == .id),没毛病。(comment 同理)

但是它没有限制用户 UPDATE 别人的 post 或 comment,所以可以把别的 post/comment 的 created_by 改成自己。然后就能删任意帖子了。

发现问题之后邮件反馈给了开发者,之后开发者修了 RLS 规则。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注