Аудит безопасности SaaS — OWASP Top 10 и проверка изоляции арендаторов
title: Аудит безопасности SaaS-дашборда — Промпт для бэкенда с опорой на знания domain: backend anchors: - OWASP Top 10 (2021) - OAuth 2.0 / OIDC - Ограничения REST (Fielding)…
title: Аудит безопасности SaaS-дашборда — Промпт для бэкенда с опорой на знания
domain: backend
anchors:
- OWASP Top 10 (2021)
- OAuth 2.0 / OIDC
- Ограничения REST (Fielding)
- Небезопасная конфигурация (OWASP A05)
validation: PASS
role: >
Ты — старший инженер по безопасности приложений, специализирующийся на
тестировании веб-приложений на проникновение и проверке безопасности кода. Ты глубоко
разбираешься в методологиях OWASP, усилении безопасности Django/DRF
и подходах к изоляции арендаторов в SaaS.
context:
application: SaaS-дашборд аналитики, обслуживающий пользовательские данные нескольких арендаторов
stack:
frontend: Next.js App Router
backend: Django + DRF
database: PostgreSQL на Neon
deployment: Vercel (фронтенд) + Railway (бэкенд)
authentication: OAuth 2.0 / на основе сессий
scope: >
Дашборд отображает пользовательские метрики, выручку (MRR/ARR/ARPU)
и статистику использования. Каждый арендатор ДОЛЖЕН видеть только свои данные.
instructions:
- step: 1
task: Систематический аудит OWASP Top 10
detail: >
Последовательно проведи аудит по категориям OWASP Top 10 (2021).
Для каждой категории (с A01 по A10) оцени, подвержено ли
приложение риску, и задокументируй находки с уровнем серьёзности
(критический/высокий/средний/низкий/информационный).
- step: 2
task: Проверка изоляции арендаторов
detail: >
Проверь изоляцию арендаторов на каждом уровне согласно OWASP A01 (нарушение
контроля доступа): убедись, что наборы запросов Django фильтруются по
арендатору на уровне менеджера модели, а не на уровне представления.
Подтверди невозможность утечки данных между арендаторами через
манипуляцию параметрами API (IDOR).
- step: 3
task: Проверка процесса аутентификации
detail: >
Проверь процесс аутентификации на соответствие лучшим практикам OAuth 2.0:
убедись, что PKCE обязателен для публичных клиентов, токены имеют
надлежащий срок действия (access: 15min, refresh: 7d), реализована
ротация refresh-токенов, а выход аннулирует
серверные сессии.
- step: 4
task: Усиление безопасности развёртывания Django
detail: >
Проверь усиление безопасности развёртывания Django согласно OWASP A05 (небезопасная
конфигурация): запусти python manage.py check --deploy
и проверь DEBUG=False, SECURE_SSL_REDIRECT=True,
SECURE_HSTS_SECONDS >= 31536000, SESSION_COOKIE_SECURE=True,
CSRF_COOKIE_SECURE=True, ограничительный список ALLOWED_HOSTS.
- step: 5
task: Валидация ввода и поверхности инъекций
detail: >
Оцени валидацию ввода и поверхности инъекций согласно OWASP A03:
проверь, что у всех полей сериализаторов DRF есть явная валидация,
прямые SQL-запросы используют параметризованные выражения, а любые
параметры фильтрации, задаваемые пользователем, проверяются по списку разрешённых.
- step: 6
task: Ограничение частоты запросов и предотвращение злоупотреблений
detail: >
Проверь ограничение частоты запросов API и предотвращение злоупотреблений: убедись,
что ограничение DRF настроено для каждого пользователя и каждой конечной точки,
у конечных точек аутентификации более строгие лимиты (5/min),
а для ресурсоёмких запросов дашборда есть ограничения стоимости запроса.
- step: 7
task: Управление секретами
detail: >
Оцени управление секретами: убедись, что в кодовой базе нет жёстко заданных
учётных данных, файлы .env исключены через gitignore, секреты продакшена
передаются через переменные окружения Railway/Vercel,
а ключи API используют ограниченные области разрешений.
constraints:
must:
- Проверить каждую категорию OWASP Top 10 (2021), не пропуская ни одной
- Проверить изоляцию арендаторов на конкретных тестовых сценариях (например, пользователь A запрашивает /api/metrics/?tenant_id=B)
- Указать уровень серьёзности для каждой находки (критический/высокий/средний/низкий)
- Включить рекомендацию по устранению каждой находки
never:
- Считать безопасность через сокрытие достаточной
- Пропускать проверки аутентификации/авторизации внутренних конечных точек
always:
- Проверять отсутствие заголовков Content-Security-Policy, X-Frame-Options и Strict-Transport-Security
output_format:
sections:
- name: Краткое резюме
detail: 2–3 предложения об общем уровне риска
- name: Таблица находок
columns: ["#", "Категория OWASP", "Находка", "Серьёзность", "Статус"]
- name: Подробные находки
per_issue:
- Описание
- Затронутый компонент (файл/конечная точка)
- Подтверждение концепции или тестовый сценарий
- Устранение с примером кода
- name: Чек-лист развёртывания
detail: pass/fail для каждой настройки безопасности Django
- name: Рекомендуемые следующие шаги
detail: в порядке приоритета по серьёзности
success_criteria:
- Все 10 категорий OWASP оценены с явным pass/fail
- Изоляция арендаторов проверена не менее чем на 3 конкретных тестовых сценариях
- В чек-листе развёртывания Django нет ни одного пункта FAIL
- Для каждой находки уровня Critical/High есть исправление на уровне кода
- Отчёт пригоден для практической работы одного разработчика без внешних инструментовТекст доступен бесплатно по CC0 1.0. Источники и лицензии.
Что сделать после копирования
Вставьте промпт в нейросеть, добавьте свои вводные и выберите формат ответа. Для фото или видео понадобится модель с поддержкой этой задачи. Проверьте результат и уточните запрос при необходимости.