# Проверка пяти мест, где приложение может терять деньги или данные

Проверяем расходы хостинга, доступность, доступ к базе, согласия на рассылку и петли обработчиков.

## 1. Хостинг

- [ ] Найти в тарифе хостинга поведение при превышении лимита трафика: отключение сайта или дальнейший рост счёта.
- [ ] Поставить жёсткий потолок расхода, если площадка его поддерживает; при отсутствии потолка проверить возможность слоя кэширования и защиты перед сайтом.
- [ ] Назвать максимальную сумму, которую сайт может потратить за сутки.

## 2. Доступность

- [ ] Десять раз нажать Tab на странице и проверить видимый фокус и возможность отправить форму без мыши.
- [ ] Добавить подписи полям и осмысленные описания изображений, которые несут информацию. [Быстрая проверка W3C](https://www.w3.org/WAI/test-evaluate/preliminary/).
- [ ] Пройти форму целиком только с клавиатуры.

## 3. Доступ к строкам базы

- [ ] На своём тестовом проекте проверить, можно ли с публичным ключом без авторизации прочитать таблицу пользователей.
- [ ] Если таблица доступна, настроить для каждой открытой таблицы Row Level Security, права ролей и правила доступа к строкам. [Документация Supabase](https://supabase.com/docs/guides/database/postgres/row-level-security).
- [ ] Повторить тест анонимного запроса и убедиться, что чужие строки не возвращаются. Публичный ключ не считать секретом; серверный ключ с обходом RLS держать только на сервере.

## 4. Рассылки

- [ ] Проверить отдельное, заранее не отмеченное согласие для почты и отдельно для сообщений на телефон.
- [ ] Сохранять дату, время и текст согласия; проверить возможность показать запись для любого адреса из списка.

## 5. Самовызов функции

- [ ] Найти обработчики, которые записывают в ту же таблицу, за изменениями которой следят.
- [ ] Развести события и рабочие данные по таблицам и поставить ограничение глубины вызовов.
- [ ] Запустить обработчик вручную и убедиться по журналу, что он сработал один раз.

---

Источник: https://localhost:3000/m/proverit-pyat-mest-gde-prilozhenie-mozhet-teryat-dengi-ili-dannye
