ИИ-инструменты и скрипты
Проверка функций Convex
Проверьте функции Convex перед деплоем: ключи в коде, публичные мутации, удаляющие по ID без проверки авторизации, CORS, передающий cookie любому сайту, отсутствующие валидаторы, api.* в cron-задачах и запросы, читающие таблицы целиком.
Что вы получите: 1 файл · 43.88 KB · ZIP
Варианты покупкиОписание товара
Мутация вида remove = mutation({ args: { id: v.id("tasks") }, handler: async (ctx, args) => { await ctx.db.delete(args.id) } }) прекрасно работает в разработке, а в продакшене позволяет любому, кто скопирует URL вашего деплоя из браузера, удалить любую задачу: каждый экспортированный query, mutation и action публичен. То же касается corsRouter с allowCredentials: true и источниками по умолчанию, который возвращает обратно Origin любого сайта, и cron-задачи, вызывающей api.messages.send с автором "System", которую может отправить и любой клиент. Этот навык находит такие ошибки и другие ошибки Convex из списка ниже до деплоя и объясняет, как исправить каждую из них.
Ваш агент запускает сканер для файлов TypeScript и JavaScript в папке convex/ (функции, http.ts, crons.ts, schema.ts). Сканер знает, какие конструкторы публичные, а какие внутренние, читает параметры обработчиков в виде стрелочных функций, обычных функций и методов (а также именованные обработчики, объявленные в том же файле), отслеживает псевдонимы импортов и считает проверками доступа ctx.auth, getAuthUserId, вспомогательные функции авторизации, получающие ctx, пользовательские обёртки функций и аргументы secret, key или code, поэтому конфигурации Convex Auth и Clerk из документации проходят проверку без замечаний. Вызовы других функций через ctx.runMutation и вызовы компонентов, например ограничителя частоты запросов, не принимаются за проверки авторизации, а маршрутам вебхуков нужен настоящий вызов верификации, а не просто имя со словом webhook. Сканер никогда не запускает ваш код и не подключается к деплою. Он возвращает BLOCK, REVIEW или NOT FLAGGED с указанием файла, строки, причины и более безопасного подхода, а руководство по правилам ссылается на официальную страницу, на которой основано каждое правило. Секреты никогда не выводятся.
Что проверяется
BLOCK (исправить до выпуска)
- C01: API-ключи, токены и пароли, записанные в коде Convex: константы и свойства с именами секретов, заголовки Authorization, литеральные значения по умолчанию после process.env, известные форматы ключей (секретные ключи Stripe и Clerk, секреты вебхуков, ключи OpenAI, Anthropic, GitHub, Slack, Google и AWS, ключи деплоя Convex, включая preview-ключи, админ-ключи self-hosted, приватные ключи) и пароли в URL баз данных
- C02: публичная мутация, которая изменяет, заменяет или удаляет документ по ID из своих аргументов без проверки вызывающего
- C03: учётные данные разрешены для любого источника: corsRouter с allowCredentials и источниками по умолчанию, "*" или шаблонами общих хостов вроде "*.vercel.app", либо заголовок Origin, возвращаемый обратно с Access-Control-Allow-Credentials без проверки (или только с проверкой startsWith)
REVIEW (проверить перед релизом)
- C11: публичная мутация или action, которые никогда не проверяют, кто их вызывает (сохранение через ctx.runMutation или вызов компонента проверкой не считается)
- C12: публичная функция, читающая аргументы без валидатора args
- C13: функции api.*, которые планируются, запускаются через ctx.runQuery / runMutation / runAction или вызываются cron-задачами вместо internal.*
- C14: .filter в запросе к базе данных вместо индекса (кроме запросов с пагинацией)
- C15: .collect() в запросе без диапазона индекса
- C16: Date.now() или new Date() внутри query
- C17: HTTP action, который записывает данные, планирует задачи или сохраняет файлы без ctx.auth, без проверки заголовка Authorization или подписи и без вызова верификации (svix, jwt, stripe constructEvent, HMAC)
- C18: записи ctx.db, вызовы планировщика или ctx.runMutation / runAction без await
- C19: возвращаемый Origin с учётными данными, единственная проверка которого нестрогая или неясная (endsWith без ведущей точки, includes, регулярное выражение без привязки)
Что входит в комплект
- Сканер (Python 3.9+, только стандартная библиотека)
- Руководство по правилам с причиной, более безопасным подходом и официальным источником для каждого правила
- Рискованный и безопасный примеры бэкенда на Convex (задачи, AI action, cron-задачи и HTTP-маршруты), а также реальный отчёт сканера по рискованному примеру
Ограничения
Сканер читает каждый файл отдельно. Обработчики, переданные по имени, отслеживаются, только если они объявлены в том же файле. Вспомогательным функциям и пользовательским обёрткам, определённым в других файлах, доверяется выполнение проверок, которые подразумевают их имена, поэтому функции, созданные через customMutation, authedMutation или Ents, и обработчики, импортированные из других файлов, не проверяются на отсутствие авторизации или валидаторов. Запросы, собранные из нескольких операторов, правила row-level security, а также списки разрешений или настройки CORS, хранящиеся в других файлах, не отслеживаются; клиентский код, файлы .env и настройки панели управления не читаются. NOT FLAGGED не является гарантией.
Содержимое
Один ZIP-архив с 19 файлами: SKILL.md, сканер в scripts/ (6 файлов Python), references/rules.md (каждое правило с причиной и более безопасным подходом) и examples/ (10 файлов примеров и report.md, реальный вывод сканера по рискованному примеру).
Как использовать: это навык для агента: папка с файлом SKILL.md и скриптами Python, которые может запускать ИИ-агент для программирования, например Claude Code, Cursor или Codex CLI. Распакуйте его в папку навыков вашего агента (для Claude Code: ~/.claude/skills/), затем попросите агента проверить ваш проект. Скрипты также работают самостоятельно с Python 3.9 или новее, ничего устанавливать не нужно. Они только читают ваши файлы: никакого доступа к сети, ничего никуда не отправляется.
Что вы получите
1 файл · 43.88 KB
- convex-functions-check-1.0.0.zipZIP · 43.88 KB
ИИ-инструменты и скрипты
Проверка функций Convex
Проверьте функции Convex перед деплоем: ключи в коде, публичные мутации, удаляющие по ID без проверки авторизации, CORS, передающий cookie любому сайту, отсутствующие валидаторы, api.* в cron-задачах и запросы, читающие таблицы целиком.
Getly открыл загруженные файлы и не нашёл ничего, что помешало бы их открыть. Это не проверка на вирусы и не оценка качества.
Теги
Частые вопросы
Доступ открывается сразу?
Да. Это цифровой товар - скачать его можно сразу после оплаты, прямо из своей библиотеки.
Можно ли использовать в коммерческих проектах?
Да. Коммерческое использование разрешено: в своём бизнесе и в том, что вы продаёте. Перепродавать и распространять сам файл нельзя.
Какие условия возврата?
Запросить возврат можно в течение 30 дней. Если что-то не так, оформите заявку в своём заказе - её рассмотрит команда Getly.
Какие форматы и размеры файлов я получу?
Вы скачаете 1 файл - ZIP - всего 43.88 KB.
Обновления бесплатны?
Да - когда продавец выпускает новую версию, вы можете бесплатно скачать актуальные файлы из своей библиотеки. Последние изменения смотрите в истории версий.
Цена
$5.00



