RLS et Supabase

1 min de lecture

La clé anon est publique, c'est voulu

La clé `anon` de Supabase est faite pour vivre dans le navigateur : elle apparaît forcément dans le bundle JS de n'importe quelle app Supabase. Ce n'est PAS une fuite en soi, et detektd ne la remonte jamais comme une faille à elle seule.

RLS est la vraie barrière

Ce qui protège vos données, c'est Row Level Security (RLS) sur chaque table, pas le secret de la clé anon. Une table avec RLS désactivée, ou une policy qui autorise `select`/`insert`/`delete` sans filtrer par propriétaire, est lisible et modifiable par n'importe qui possédant la clé anon, c'est-à-dire n'importe quel visiteur de votre site.

À quoi ressemble une policy correcte

Activez RLS sur chaque table, puis écrivez des policies qui filtrent explicitement par propriétaire (typiquement `auth.uid() = user_id`) plutôt que d'autoriser un accès large "pour que ça marche" (`using (true)`).

sql
-- 1. turn RLS on for the table
alter table public.orders enable row level security;

-- 2. a row is only visible to the user who owns it
create policy "select own orders"
  on public.orders for select
  using (auth.uid() = user_id);

-- 3. same for writes, never just "using (true)"
create policy "insert own orders"
  on public.orders for insert
  with check (auth.uid() = user_id);

Le correctif fourni avec chaque finding RLS donne l'exemple de policy adapté à la table concernée dans votre propre schéma, pas cet exemple générique.

Cet article vous a aidé ?
RLS et Supabase | detektd