Aller au contenu principal

Menu de commandes

Accédez à une page ou recherchez dans le catalogue

Outils et scripts IA

Vérification des fonctions Convex

Vérifiez vos fonctions Convex avant de déployer : clés dans le code, mutations publiques qui suppriment par ID sans contrôle d'authentification, CORS qui partage les cookies avec n'importe quel site, validateurs manquants, api.* dans les crons et requêtes qui lisent des tables entières.

$5.00

Ce que vous recevez : 1 fichier · 43.88 KB · ZIP

Voir les options d'achat

Description du produit

Une mutation comme remove = mutation({ args: { id: v.id("tasks") }, handler: async (ctx, args) => { await ctx.db.delete(args.id) } }) fonctionne très bien en développement, mais en production elle permet à quiconque copie l'URL de votre déploiement depuis le navigateur de supprimer n'importe quelle tâche : chaque query, mutation et action exportée est publique. Il en va de même pour corsRouter avec allowCredentials: true et les origines par défaut, qui renvoie l'Origin de n'importe quel site, et pour une tâche cron qui appelle api.messages.send avec l'auteur "System", ce que n'importe quel client peut également envoyer. Ce skill détecte ces erreurs ainsi que les autres erreurs Convex listées ci-dessous avant votre déploiement, et vous explique comment corriger chacune d'elles.

Votre agent exécute un scanner sur les fichiers TypeScript et JavaScript de votre dossier convex/ (fonctions, http.ts, crons.ts, schema.ts). Il sait quels constructeurs sont publics et lesquels sont internes, lit les paramètres des handlers sous forme de fonction fléchée, de fonction et de méthode (ainsi que les handlers nommés déclarés dans le même fichier), suit les alias d'import et considère comme des contrôles d'accès ctx.auth, getAuthUserId, les helpers d'authentification qui reçoivent ctx, les wrappers de fonctions personnalisés et les arguments secret, key ou code, si bien que les configurations Convex Auth et Clerk de la documentation ressortent sans alerte. Les appels à d'autres fonctions via ctx.runMutation et les appels de composants, comme un limiteur de débit, ne sont pas pris pour des contrôles d'authentification, et les routes de webhook nécessitent un véritable appel de vérification, pas seulement un nom contenant webhook. Il n'exécute jamais votre code et ne se connecte jamais à un déploiement. Il renvoie BLOCK, REVIEW ou NOT FLAGGED, avec le fichier, la ligne, la raison et une approche plus sûre, et le guide des règles renvoie vers la page officielle sur laquelle repose chaque règle. Les secrets ne sont jamais affichés.

Ce qui est vérifié

BLOCK (à corriger avant la mise en production)

  • C01 : clés API, jetons et mots de passe écrits dans le code Convex : constantes et propriétés aux noms de secrets, en-têtes Authorization, valeurs littérales de repli après process.env, formats de clés connus (clés secrètes Stripe et Clerk, secrets de webhook, clés OpenAI, Anthropic, GitHub, Slack, Google et AWS, clés de déploiement Convex y compris les clés de preview, clés d'administration auto-hébergées, clés privées) et mots de passe dans les URL de bases de données
  • C02 : une mutation publique qui modifie, remplace ou supprime un document à partir d'un ID issu de ses arguments sans vérifier l'appelant
  • C03 : identifiants autorisés pour n'importe quelle origine : corsRouter avec allowCredentials et les origines par défaut, "*" ou des jokers d'hôtes partagés comme "*.vercel.app", ou un en-tête Origin renvoyé avec Access-Control-Allow-Credentials sans contrôle (ou avec seulement un contrôle startsWith)

REVIEW (à vérifier avant la publication)

  • C11 : une mutation ou une action publique qui ne vérifie jamais qui l'appelle (enregistrer via ctx.runMutation ou appeler un composant ne compte pas comme un contrôle)
  • C12 : une fonction publique qui lit ses arguments sans validateur args
  • C13 : des fonctions api.* planifiées, exécutées avec ctx.runQuery / runMutation / runAction ou appelées par des tâches cron au lieu de internal.*
  • C14 : .filter sur une requête de base de données au lieu d'un index (requêtes paginées exceptées)
  • C15 : .collect() sur une requête sans plage d'index
  • C16 : Date.now() ou new Date() à l'intérieur d'une query
  • C17 : une action HTTP qui écrit des données, planifie des tâches ou stocke des fichiers sans ctx.auth, sans contrôle d'un en-tête Authorization ou de signature et sans appel de vérification (svix, jwt, stripe constructEvent, HMAC)
  • C18 : écritures ctx.db, appels au planificateur ou ctx.runMutation / runAction sans await
  • C19 : une Origin renvoyée avec identifiants dont le seul contrôle est laxiste ou ambigu (endsWith sans point initial, includes, une expression régulière non ancrée)

Ce qui est inclus

  • Le scanner (Python 3.9+, bibliothèque standard uniquement)
  • Un guide des règles avec la raison, l'approche plus sûre et la source officielle de chaque règle
  • Un exemple de backend Convex risqué et un exemple sûr (tâches, une action IA, crons et routes HTTP), ainsi que le rapport réel produit par le scanner sur l'exemple risqué

Limites

Il lit chaque fichier séparément. Les handlers fournis par leur nom ne sont suivis que s'ils sont déclarés dans le même fichier. Les helpers et les wrappers de fonctions personnalisés définis dans d'autres fichiers sont présumés effectuer les contrôles que suggèrent leurs noms : les fonctions créées avec customMutation, authedMutation ou Ents, ainsi que les handlers importés d'autres fichiers, ne sont donc pas vérifiés pour l'absence d'authentification ou de validateurs. Les requêtes construites sur plusieurs instructions, les règles de row-level security, ainsi que les listes d'autorisation ou paramètres CORS conservés dans d'autres fichiers ne sont pas suivis, et le code client, les fichiers .env et les paramètres du tableau de bord ne sont pas lus. NOT FLAGGED n'est pas une garantie.

Contenu

Un fichier ZIP contenant 19 fichiers : SKILL.md, le scanner dans scripts/ (6 fichiers Python), references/rules.md (chaque règle avec sa raison et une approche plus sûre) et examples/ (10 fichiers d'exemple plus report.md, la sortie réelle du scanner sur l'exemple risqué).

Utilisation : il s'agit d'un skill d'agent : un dossier contenant un fichier SKILL.md et des scripts Python qu'un agent de programmation IA tel que Claude Code, Cursor ou Codex CLI peut exécuter. Décompressez-le dans le dossier de skills de votre agent (pour Claude Code : ~/.claude/skills/), puis demandez à votre agent de vérifier votre projet. Les scripts fonctionnent aussi seuls avec Python 3.9 ou une version plus récente, sans rien à installer. Ils se contentent de lire vos fichiers : aucun accès réseau, et rien n'est envoyé nulle part.

Ce que vous recevez

1 fichier · 43.88 KB

  • convex-functions-check-1.0.0.zipZIP · 43.88 KB
LicenceUsage commercial autorisé
Vérification du paquetRéussie

Getly a ouvert les fichiers envoyés et n'a rien trouvé qui empêche leur ouverture. Ce n'est ni une analyse antivirus ni une note de qualité.

Publié12 nov. 2026
Taille du fichier43.88 KB
Format du fichierZIP
Versionv1.0

Tags

convexbackendtypescriptsecuritydatabaseai agent skill
R
RR HH

Questions fréquentes

Ai-je accès au produit immédiatement ?

Oui. C'est un produit numérique : vous pouvez le télécharger juste après le paiement, directement depuis votre bibliothèque.

Puis-je l'utiliser pour des projets commerciaux ?

Oui. L'usage commercial est autorisé : utilisez-le dans votre propre activité et dans ce que vous vendez. Vous ne pouvez pas revendre ni redistribuer le fichier lui-même.

Quelle est votre politique de remboursement ?

Vous pouvez demander un remboursement dans un délai de 30 jours. Si quelque chose ne va pas, demandez-le depuis votre commande et l'équipe Getly l'examine.

Quels formats et quelles tailles de fichier vais-je recevoir ?

Vous téléchargerez 1 fichier - ZIP - 43.88 KB au total.

Ai-je droit aux mises à jour gratuites ?

Oui : quand le vendeur publie une nouvelle version, vous pouvez retélécharger les derniers fichiers depuis votre bibliothèque sans frais. Consultez le journal des modifications pour les dernières mises à jour.

Prix

$5.00