perl-security
Faz seu agente garantir a segurança do código Perl. Ele verifica entradas, execuções e consultas para prevenir ataques comuns.
O que ela faz
Este código ajuda a proteger seus programas escritos na linguagem Perl contra ataques maliciosos. Ele verifica as informações que o programa recebe, garante que comandos sejam executados de forma segura e protege contra acessos indevidos a bancos de dados e sites.
Quando usar
- ✓Ao receber informações de usuários.
- ✓Ao criar sites ou aplicações web com Perl.
- ✓Ao revisar códigos Perl para encontrar falhas de segurança.
Exemplo do que pedir para a IA
“Revise este código Perl para garantir que ele não seja vulnerável a injeção de SQL ou XSS.”
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
Mensagem pronta para colar
Como funciona
Ele funciona ativando um modo de segurança no Perl que rastreia dados externos. Em seguida, valida e limpa essas informações antes de usá-las em operações sensíveis, como acessar bancos de dados ou executar comandos.
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 perl-securityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/perl-security/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Segurança em Perl
Diretrizes abrangentes de segurança para aplicações Perl cobrindo validação de entrada, prevenção de injeção e práticas de codificação segura.
Quando Ativar
- Ao lidar com entrada do usuário em aplicações Perl
- Ao construir aplicações web em Perl (CGI, Mojolicious, Dancer2, Catalyst)
- Ao revisar código Perl em busca de vulnerabilidades de segurança
- Ao realizar operações de arquivo com caminhos fornecidos pelo usuário
- Ao executar comandos do sistema a partir do Perl
- Ao escrever consultas de banco de dados DBI
Como Funciona
Comece com limites de entrada cientes de "taint", depois avance: valide e "des-taint" as entradas, mantenha o sistema de arquivos e a execução de processos restritos, e use consultas DBI parametrizadas em todos os lugares. Os exemplos abaixo mostram as configurações padrão seguras que esta habilidade espera que você aplique antes de enviar código Perl que toque na entrada do usuário, no shell ou na rede.
Modo Taint
O modo taint do Perl (-T) rastreia dados de fontes externas e impede que sejam usados em operações inseguras sem validação explícita.
Habilitando o Modo Taint
#!/usr/bin/perl -T
use v5.36;
# Tainted: anything from outside the program
my $input = $ARGV[0]; # Tainted
my $env_path = $ENV{PATH}; # Tainted
my $form = <STDIN>; # Tainted
my $query = $ENV{QUERY_STRING}; # Tainted
# Sanitize PATH early (required in taint mode)
$ENV{PATH} = '/usr/local/bin:/usr/bin:/bin';
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
Padrão de Des-tainting
use v5.36;
# Good: Validate and untaint with a specific regex
sub untaint_username($input) {
if ($input =~ /^([a-zA-Z0-9_]{3,30})$/) {
return $1; # $1 is untainted
}
die "Invalid username: must be 3-30 alphanumeric characters\n";
}
# Good: Validate and untaint a file path
sub untaint_filename($input) {
if ($input =~ m{^([a-zA-Z0-9._-]+)$}) {
return $1;
}
die "Invalid filename: contains unsafe characters\n";
}
# Bad: Overly permissive untainting (defeats the purpose)
sub bad_untaint($input) {
$input =~ /^(.*)$/s;
return $1; # Accepts ANYTHING — pointless
}
Validação de Entrada
Lista de Permissões Sobre Lista de Bloqueio
use v5.36;
# Good: Allowlist — define exactly what's permitted
sub validate_sort_field($field) {
my %allowed = map { $_ => 1 } qw(name email created_at updated_at);
die "Invalid sort field: $field\n" unless $allowed{$field};
return $field;
}
# Good: Validate with specific patterns
sub validate_email($email) {
if ($email =~ /^([a-zA-Z0-9._%+-]+\@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$/) {
return $1;
}
die "Invalid email address\n";
}
sub validate_integer($input) {
if ($input =~ /^(-?\d{1,10})$/) {
return $1 + 0; # Coerce to number
}
die "Invalid integer\n";
}
# Bad: Blocklist — always incomplete
sub bad_validate($input) {
die "Invalid" if $input =~ /[<>"';&|]/; # Misses encoded attacks
return $input;
}
Restrições de Comprimento
use v5.36;
sub validate_comment($text) {
die "Comment is required\n" unless length($text) > 0;
die "Comment exceeds 10000 chars\n" if length($text) > 10_000;
return $text;
}
Expressões Regulares Seguras
Prevenção de ReDoS
O backtracking catastrófico ocorre com quantificadores aninhados em padrões sobrepostos.
use v5.36;
# Bad: Vulnerable to ReDoS (exponential backtracking)
my $bad_re = qr/^(a+)+$/; # Nested quantifiers
my $bad_re2 = qr/^([a-zA-Z]+)*$/; # Nested quantifiers on class
my $bad_re3 = qr/^(.*?,){10,}$/; # Repeated greedy/lazy combo
# Good: Rewrite without nesting
my $good_re = qr/^a+$/; # Single quantifier
my $good_re2 = qr/^[a-zA-Z]+$/; # Single quantifier on class
# Good: Use possessive quantifiers or atomic groups to prevent backtracking
my $safe_re = qr/^[a-zA-Z]++$/; # Possessive (5.10+)
my $safe_re2 = qr/^(?>a+)$/; # Atomic group
# Good: Enforce timeout on untrusted patterns
use POSIX qw(alarm);
sub safe_match($string, $pattern, $timeout = 2) {
my $matched;
eval {
local $SIG{ALRM} = sub { die "Regex timeout\n" };
alarm($timeout);
$matched = $string =~ $pattern;
alarm(0);
};
alarm(0);
die $@ if $@;
return $matched;
}
Operações de Arquivo Seguras
open com Três Argumentos
use v5.36;
# Bom: open com três argumentos, filehandle lexical, verifica o retorno
sub read_file($path) {
open my $fh, '<:encoding(UTF-8)', $path
or die "Não é possível abrir '$path': $!\n";
local $/;
…
Perguntas frequentes
O que é 'taint mode'?
É um modo de segurança do Perl que marca dados vindos de fora do programa. Isso ajuda a garantir que esses dados sejam verificados antes de serem usados em ações que podem ser perigosas.
O que é 'input validation'?
É o processo de verificar se as informações recebidas pelo programa estão no formato esperado e não contêm nada perigoso, como comandos maliciosos.
Por que usar 'parameterized queries' para bancos de dados?
Elas separam os comandos do banco de dados dos dados que você envia, prevenindo que dados maliciosos sejam interpretados como comandos, o que evita ataques de injeção de SQL.
Detalhes
Descrição original do autor
Comprehensive Perl security covering taint mode, input validation, safe process execution, DBI parameterized queries, web security (XSS/SQLi/CSRF), and perlcritic security policies. Use when reviewing Perl input handling, process execution, DBI queries, or web-facing code.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #96
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
security-and-hardening
Protege seu código contra ataques e falhas de segurança. Garante que dados sensíveis estejam seguros e que o sistema seja confiável.
addyosmani/agent-skills
luna
Faz seu agente verificar se o código está seguro e funcionando corretamente. Ele procura por erros e falhas que possam causar problemas.
sickn33/agentic-awesome-skills
anti-reversing-techniques
Ajuda seu agente a analisar técnicas de segurança em programas. Permite entender como softwares se protegem contra cópias ou alterações.
sickn33/agentic-awesome-skills