Перейти к содержимому

Вашу базу данных Supabase может прочитать кто угодно

Критично Весь домен Безопасность

Общие инструкции. Откройте эту статью из своего отчёта PageCheck, чтобы увидеть её заполненной записями вашего домена и точными шагами для вашего DNS-хостинга.

Что это такое

Ваш сайт хранит содержимое в базе данных Supabase. Страница обращается к этой базе с помощью публичного ключа, который входит в код страницы, поэтому он есть в браузере каждого посетителя. Этот ключ и должен быть публичным — данные защищает набор правил доступа для каждой таблицы (в Supabase это называется Row Level Security).

Что не так

Ваша база данных Supabase отвечает на публичный ключ и выдаёт список своих таблиц, значит Row Level Security выключен или настроен не полностью. Любой, кто откроет ваш сайт, может прочитать, а часто и изменить или удалить данные за ним.

Как исправить

1. Включите правила доступа для каждой таблицы. В панели Supabase откройте Authentication → Policies (или Table editor → каждая таблица → Row Level Security) и включите Row Level Security для каждой таблицы в схеме public. Когда она включена, а политик нет, публичный ключ не может прочитать ничего.

2. Добавьте политику только для того, что должно быть доступно всем. Если часть таблицы действительно публична (например, список товаров), добавьте политику, которая разрешает читать только эти строки и столбцы. Всё остальное остаётся закрытым и доступно только вашему собственному серверному коду, который использует секретный ключ, а не ключ из страницы.

3. Проверьте снаружи. Откройте сайт в приватном окне браузера и убедитесь, что он по-прежнему работает, затем запустите эту проверку снова. Менять публичный ключ не нужно — он и должен быть публичным; данные защищают правила доступа.

Lock down my Supabase database: it is readable with the public anon key because Row Level Security is off.
Project: <my .supabase.co project>.

Steps:
1. List every table in the public schema and tell me which, if any, genuinely need to be readable by anonymous visitors.
2. Enable Row Level Security on every table in the public schema.
3. For the tables that must be public, add the narrowest SELECT policy that serves the site (only the needed rows and columns); leave the rest with no anon policy.
4. Make sure the app reads private data only through server-side code using the service_role key, never the anon key in the browser.
5. Give me the SQL for the policies and the exact dashboard steps, and tell me how to verify from an anonymous client that the private tables return nothing.
Do not rotate the anon key — it is public by design; the fix is the access rules.

Проверьте свой сайт, чтобы узнать, есть ли у него эта проблема. Проверить сайт