aiactio-security
Security auditing tool for verifying Server Actions, RLS, and secure coding practices in aiactio.
Install
mkdir -p .claude/skills/aiactio-security && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11386" && unzip -o skill.zip -d .claude/skills/aiactio-security && rm skill.zipInstalls to .claude/skills/aiactio-security
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Utiliser pour tout audit de securite, ajout de Server Actions, modification de politiques RLS, gestion de cles API, ou revue de code sensible dans aiactio. Contient la checklist complete, les gotchas critiques, et un script d'audit automatique.Key capabilities
- →Scan code for common vulnerabilities
- →Audit Row-Level Security (RLS) policies
- →Provide templates for secure middleware
- →Manage API keys securely
- →Review sensitive code in aiactio
How it works
The skill provides a complete checklist, critical gotchas, and an automatic audit script to scan for common vulnerabilities and ensure secure practices in aiactio.
Inputs & outputs
When to use aiactio-security
- →Auditing security for Server Actions
- →Checking RLS policies
- →Managing API keys securely
About this skill
Security — aiactio
Structure du skill
references/rls-patterns.md— politiques RLS par table, patterns avancesscripts/audit-security.sh— scan automatique des failles courantesassets/middleware-template.ts— template middleware Next.js avec auth
Regles non-negociables
- Toute Server Action = endpoint HTTP public — toujours
getUser()en premier - Validation Zod obligatoire — les types TypeScript ne protegent pas au runtime
- RLS sur toutes les tables user-data — sans exception
SUPABASE_SERVICE_ROLE_KEYjamais dans un composant client ou exposeuser_id=auth.uid()dans tous les inserts — jamais fourni par le clientconsent_logsimmuable — policies SELECT + INSERT uniquement, jamais UPDATE/DELETE- Messages d'erreur generiques en prod — jamais de stack trace ou details internes
- Middleware protege
/dashboard/*— redirect vers/loginsi non authentifie
Checklist Server Action
'use server'
// 1. Authentification — TOUJOURS en premier
const { data: { user } } = await supabase.auth.getUser()
if (!user) return { success: false, error: 'Non authentifie' }
// 2. Validation Zod — AVANT tout traitement
const parsed = schema.safeParse(input)
if (!parsed.success) return { success: false, error: parsed.error.errors[0].message }
// 3. Autorisation — verifier que l'user peut agir sur CETTE ressource
const { data: resource } = await supabase.from('resources').select('user_id').eq('id', id).single()
if (!resource || resource.user_id !== user.id) return { success: false, error: 'Non autorise' }
// 4. Erreur generique — jamais de details internes
if (error) return { success: false, error: 'Erreur serveur' } // pas error.message
Checklist RLS
Pour chaque nouvelle table :
-- Activer RLS
ALTER TABLE ma_table ENABLE ROW LEVEL SECURITY;
-- SELECT : l'user voit uniquement ses donnees
CREATE POLICY "users_select_own" ON ma_table
FOR SELECT USING (user_id = auth.uid());
-- INSERT : l'user ne peut inserer que pour lui-meme
CREATE POLICY "users_insert_own" ON ma_table
FOR INSERT WITH CHECK (user_id = auth.uid());
-- UPDATE : l'user ne peut modifier que ses donnees
CREATE POLICY "users_update_own" ON ma_table
FOR UPDATE USING (user_id = auth.uid());
-- DELETE : l'user ne peut supprimer que ses donnees
CREATE POLICY "users_delete_own" ON ma_table
FOR DELETE USING (user_id = auth.uid());
Exception consent_logs — SELECT + INSERT uniquement, jamais UPDATE/DELETE.
Middleware
Le fichier middleware.ts a la racine doit proteger /dashboard/* :
import { createServerClient } from '@supabase/ssr'
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export async function middleware(request: NextRequest) {
const response = NextResponse.next()
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{ cookies: { /* ... */ } }
)
const { data: { user } } = await supabase.auth.getUser()
if (!user && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url))
}
return response
}
export const config = { matcher: ['/dashboard/:path*'] }
Gotchas — failles courantes
G1 : oublier getUser() dans une Server Action
Les Server Actions sont appelables directement via fetch. Sans auth, elles sont publiques.
Premiere instruction apres les imports, sans exception.
G2 : faire confiance a user_id venant du client
formData.get('user_id') ou body.userId peuvent etre falsifies.
Toujours utiliser user.id depuis auth.getUser() cote serveur.
G3 : utiliser getSession() au lieu de getUser()
getSession() lit depuis le cookie local sans validation serveur — peut etre manipule.
getUser() valide aupres du serveur Supabase — securise.
G4 : exposer SUPABASE_SERVICE_ROLE_KEY
Cette cle bypasse RLS entierement. Si elle fuite, n'importe qui peut tout lire/ecrire.
Uniquement dans lib/supabase/service.ts, jamais dans un composant, jamais en NEXT_PUBLIC_.
G5 : messages d'erreur trop detailles
return { error: error.message } peut exposer la structure de la DB, les colonnes, les contraintes.
Toujours return { success: false, error: 'Erreur serveur' } en production.
G6 : RLS manquante sur une nouvelle table
Par defaut Supabase cree les tables SANS RLS. Ne jamais oublier ENABLE ROW LEVEL SECURITY.
Verifier avec : SELECT tablename, rowsecurity FROM pg_tables WHERE schemaname = 'public';
G7 : validation TypeScript sans Zod
TypeScript est efface au runtime. input: string ne garantit rien en Server Action.
Zod valide les vraies donnees recues, pas juste les types.
Voir aussi
references/rls-patterns.md— politiques par table, patterns avancesscripts/audit-security.sh— scan automatique des failles
When not to use it
- →When `SUPABASE_SERVICE_ROLE_KEY` is exposed in a client component
- →When `user_id` is trusted from the client
- →When `getSession()` is used instead of `getUser()` for server-side validation
Limitations
- →Requires adherence to specific rules like using `getUser()` in Server Actions
- →Requires Zod validation for all inputs
- →Requires RLS on all user-data tables
How it compares
This skill offers a structured approach with specific rules and checklists for security audits, unlike a manual review that might overlook critical vulnerabilities or inconsistent RLS policies.
Compared to similar skills
aiactio-security side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| aiactio-security (this skill) | 0 | 4mo | Review | Advanced |
| security-header-generator | 5 | 9mo | Caution | Intermediate |
| backend-security-coder | 24 | 4mo | No flags | Intermediate |
| vercel-data-handling | 1 | 27d | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
security-header-generator
Dexploarer
Generates security HTTP headers (CSP, HSTS, CORS, etc.) for web applications to prevent common attacks. Use when user asks to "add security headers", "setup CSP", "configure CORS", "secure headers", or "HSTS setup".
backend-security-coder
sickn33
Expert in secure backend coding practices specializing in input validation, authentication, and API security. Use PROACTIVELY for backend security implementations or security code reviews.
vercel-data-handling
jeremylongshore
Implement Vercel PII handling, data retention, and GDPR/CCPA compliance patterns. Use when handling sensitive data, implementing data redaction, configuring retention policies, or ensuring compliance with privacy regulations for Vercel integrations. Trigger with phrases like "vercel data", "vercel PII", "vercel GDPR", "vercel data retention", "vercel privacy", "vercel CCPA".
azure-keyvault-keys-ts
microsoft
Manage cryptographic keys using Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys). Use when creating, encrypting/decrypting, signing, or rotating keys.
azure-keyvault-secrets-ts
microsoft
Manage secrets using Azure Key Vault Secrets SDK for JavaScript (@azure/keyvault-secrets). Use when storing and retrieving application secrets or configuration values.
api-security-hardening
aj-geddes
>