Pular para o conteúdo
Skillpedia
Segurança280 mil · #119

security-review

Ajuda seu agente a tornar aplicativos mais seguros. Ele verifica senhas, dados de usuários e pagamentos para prevenir ataques.

O que ela faz

Esta ferramenta ajuda a verificar se o seu código está seguro, procurando por erros comuns que podem ser explorados por pessoas mal-intencionadas. Ela verifica desde como você guarda senhas até como lida com informações enviadas pelos usuários.

Quando usar

  • ✓Ao adicionar login e senha ao seu site.
  • ✓Quando seu programa recebe informações digitadas pelo usuário.
  • ✓Ao criar um local para receber pagamentos ou lidar com dados sensíveis.

Exemplo do que pedir para a IA

“Revise meu código para garantir que as senhas não estejam expostas e que os dados dos usuários sejam tratados com segurança.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/security-review/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/security-review/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta analisa seu código em busca de práticas inseguras, como senhas escritas diretamente no código ou falta de validação de dados. Ela sugere as formas corretas de fazer isso, como usar variáveis de ambiente para senhas e validar todas as informações recebidas.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill security-review

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/security-review/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Habilidade de Revisão de Segurança

Esta habilidade garante que todo o código siga as melhores práticas de segurança e identifica vulnerabilidades potenciais.

Quando Ativar

  • Implementando autenticação ou autorização
  • Lidando com entrada do usuário ou upload de arquivos
  • Criando novos endpoints de API
  • Trabalhando com segredos ou credenciais
  • Implementando funcionalidades de pagamento
  • Armazenando ou transmitindo dados sensíveis
  • Integrando APIs de terceiros

Checklist de Segurança

1. Gerenciamento de Segredos

FALHA: NUNCA Faça Isso

const apiKey = "sk-proj-xxxxx"  // Hardcoded secret
const dbPassword = "password123" // In source code

SUCESSO: SEMPRE Faça Isso

const apiKey = process.env.OPENAI_API_KEY
const dbUrl = process.env.DATABASE_URL

// Verify secrets exist
if (!apiKey) {
  throw new Error('OPENAI_API_KEY not configured')
}

Passos de Verificação

  • Sem chaves de API, tokens ou senhas codificadas diretamente
  • Todos os segredos em variáveis de ambiente
  • .env.local em .gitignore
  • Sem segredos no histórico do git
  • Segredos de produção na plataforma de hospedagem (Vercel, Railway)

2. Validação de Entrada

Sempre Valide a Entrada do Usuário

import { z } from 'zod'

// Define validation schema
const CreateUserSchema = z.object({
  email: z.string().email(),
  name: z.string().min(1).max(100),
  age: z.number().int().min(0).max(150)
})

// Validate before processing
export async function createUser(input: unknown) {
  try {
    const validated = CreateUserSchema.parse(input)
    return await db.users.create(validated)
  } catch (error) {
    if (error instanceof z.ZodError) {
      return { success: false, errors: error.issues }
    }
    throw error
  }
}

Validação de Upload de Arquivo

function validateFileUpload(file: File) {
  // Size check (5MB max)
  const maxSize = 5 * 1024 * 1024
  if (file.size > maxSize) {
    throw new Error('File too large (max 5MB)')
  }

  // Type check
  const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']
  if (!allowedTypes.includes(file.type)) {
    throw new Error('Invalid file type')
  }

  // Extension check
  const allowedExtensions = ['.jpg', '.jpeg', '.png', '.gif']
  const extension = file.name.toLowerCase().match(/\.[^.]+$/)?.[0]
  if (!extension || !allowedExtensions.includes(extension)) {
    throw new Error('Invalid file extension')
  }

  return true
}

Passos de Verificação

  • Todas as entradas do usuário validadas com esquemas
  • Uploads de arquivos restritos (tamanho, tipo, extensão)
  • Sem uso direto da entrada do usuário em consultas
  • Validação por lista branca (não lista negra)
  • Mensagens de erro não vazam informações sensíveis

3. Prevenção de Injeção de SQL

FALHA: NUNCA Concatene SQL

// DANGEROUS - SQL Injection vulnerability
const query = `SELECT * FROM users WHERE email = '${userEmail}'`
await db.query(query)

SUCESSO: SEMPRE Use Consultas Parametrizadas

// Safe - parameterized query
const { data } = await supabase
  .from('users')
  .select('*')
  .eq('email', userEmail)

// Or with raw SQL -- the value goes in the params array, never in the
// string. Use your driver's placeholder syntax (Postgres numbers its
// placeholders, MySQL uses "?").
await db.query(
  'SELECT * FROM users WHERE email = ?',
  [userEmail]
)
<!-- Não escreva um placeholder literal de cifrão-N em nenhum lugar deste arquivo. Invocar esta habilidade com argumentos a substitui, e o exemplo acima então renderiza como SQL concatenado -- o exato anti-padrão que esta seção adverte contra. Use "?" e nomeie a forma Postgres em prosa. -->

Passos de Verificação

  • Todas as consultas ao banco de dados usam consultas parametrizadas
  • Nenhuma concatenação de strings em SQL
  • ORM/construtor de consultas usado corretamente
  • Consultas Supabase devidamente sanitizadas

4. Autenticação e Autorização

Tratamento de Token JWT

// FAIL: WRONG: localStorage (vulnerable to XSS)
localStorage.setItem('token', token)

// PASS: CORRECT: httpOnly cookies
res.setHeader('Set-Cookie',
  `token=${token}; HttpOnly; Secure; SameSite=Strict; Max-Age=3600`)

Verificações de Autorização

export async function deleteUser(userId: string, requesterId: string) {
  // SEMPRE verifique a autorização primeiro
  const requester = await db.users.findUnique({
    where: { id: requesterId }
  })

  if (requester.role !== 'admin') {
    return NextResponse.json(
      { error: 'Unauthorized' },
      { status: 403 }
    )
  }

  // Proceder com a exclusão

…
Perguntas frequentes

O que são 'secrets'?

'Secrets' são informações confidenciais como senhas, chaves de API ou tokens de acesso. Nunca devem ser escritas diretamente no código ou expostas publicamente.

O que é validação de entrada?

É o processo de verificar se as informações que o usuário envia para o seu programa estão corretas e seguras antes de usá-las. Isso evita que dados maliciosos causem problemas.

O que é injeção de SQL?

É um ataque onde alguém insere comandos maliciosos em um campo de texto que seu programa envia para o banco de dados. Isso pode permitir que o atacante veja ou modifique seus dados. A ferramenta ensina a prevenir isso.

Detalhes

Descrição original do autor

Use this skill when adding authentication, handling user input, working with secrets, creating API endpoints, or implementing payment/sensitive features. Provides comprehensive security checklist and patterns.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#119
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas