如何在 Supabase 中安全实现用户“鼓掌”计数(防刷、防重放、防越权)

张开发
2026/5/6 8:38:23 15 分钟阅读
如何在 Supabase 中安全实现用户“鼓掌”计数(防刷、防重放、防越权)
本文详解如何通过 rls 策略 合理数据建模在 supabase 中安全实现用户交互式操作如虚拟鼓掌杜绝前端恶意请求篡改计数兼顾安全性与可扩展性。 本文详解如何通过 rls 策略 合理数据建模在 supabase 中安全实现用户交互式操作如虚拟鼓掌杜绝前端恶意请求篡改计数兼顾安全性与可扩展性。在构建用户参与型功能例如“鼓掌”“点赞”“收藏”时仅依赖客户端身份认证如 signInWithPassword和简单的 RLS 读写控制是远远不够的。正如你所观察到的即使启用了“仅限认证用户更新”的 RLS 策略攻击者仍可通过浏览器控制台或 Postman 复用有效的 Authorization Bearer Token 和 apikey反复发送伪造的 UPDATE 请求无限刷高计数——这本质上是缺乏操作原子性、状态校验与行为约束所致。关键在于不要直接更新计数字段如 claps_count INT而应记录每一次真实发生的用户行为事件。换言之将“鼓掌”建模为一个不可变的、带上下文的原子操作即插入一条记录再通过聚合查询获取最终计数。这种设计天然支持防刷、限频、去重、审计与数据分析。? 推荐方案事件表 强约束 RLS首先创建 claps 表记录每次鼓掌的完整上下文-- 创建鼓掌事件表主键为 (post_id, user_id)天然防止重复鼓掌create table if not exists public.claps ( post_id uuid references public.posts on delete cascade not null, user_id uuid references auth.users on delete cascade not null, created_at timestamp with time zone default timezone(utc::text, now()) not null, PRIMARY KEY (post_id, user_id) -- 关键联合主键确保单用户对单内容仅能鼓掌一次);-- 启用行级安全alter table public.claps enable row level security;-- 允许所有认证用户查询如获取某文章总鼓掌数create policy Anyone can read clapson claps for selectusing ( true );-- 仅允许用户为自己插入鼓掌记录且不能伪造 user_idcreate policy Users can insert their own clapon claps for insertwith check ( auth.uid() user_id );? 为什么有效 Fotor AI Image Generator Fotor 平台的 AI 图片生成器

更多文章