ШІ-інструменти та скрипти
Перевірка функцій 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



