Detalhe — segurança
Como este site é protegido
Este portfólio roda um assistente de IA ao vivo que custa dinheiro de verdade a cada resposta, então ele foi construído como um pequeno serviço de produção. Aqui está o que o protege, em linguagem simples — e o que ainda não protege.
Limites de gasto no assistente de IA
Cada visitante pode fazer até 8 perguntas a cada 10 minutos, e o site inteiro tem um teto de 200 respostas por dia. Os dois contadores ficam no Upstash Redis, então valem para todas as instâncias do servidor. Se o limitador não responder, o assistente se recusa a responder em vez de deixar as requisições passarem. Por trás disso, há um limite mensal de gasto em um workspace dedicado da Anthropic.
Entradas limitadas e checadas antes
Requisições acima de 16 KB são rejeitadas, cada mensagem é cortada em 800 caracteres, só as últimas 8 trocas são mantidas e cada chamada ao modelo tem teto de 1.500 tokens. Requisições malformadas são recusadas antes de chegar a qualquer limite ou ao modelo.
Só este site pode chamar o assistente
O endpoint do assistente só aceita requisições de navegador vindas do simonlaborde.com. Qualquer outro site recebe um 403 e nenhuma permissão para ler a resposta.
Testes de prompt injection
Os testes tentam sobrescrever as instruções, extrair o system prompt, trocar a persona do assistente, contrabandear instruções dentro de um texto colado, pressioná-lo a revelar dados privados e forçá-lo a dar um preço ou um prazo; um segundo grupo confere se cada resposta sobre a minha experiência bate com o meu perfil, avaliada por outro modelo de IA, e um terceiro tenta convencer o verificador de respostas a aprovar afirmações falsas. A última execução completa no site publicado passou em todos os testes, em 1 de novembro de 2026. O assistente não tem ferramentas, não executa ações e só enxerga o conteúdo público deste site; as respostas aparecem como texto puro, nunca como HTML.
Toda resposta é conferida antes de chegar a você
Antes de uma resposta ser enviada, uma segunda chamada de IA confere cada afirmação contra o meu perfil. Se algo não tiver base, a resposta é reescrita uma vez; se ainda não passar — ou se a própria checagem falhar — você recebe um aviso curto com o meu e-mail, em vez de uma resposta não conferida.
Suas perguntas e sua privacidade
As perguntas são enviadas à API Claude, da Anthropic, para gerar a resposta e conferi-la. Este site não salva conversas, e seu endereço IP fica guardado por até 10 minutos para limitar o uso. Sem cookies, sem analytics.
O formulário de contato
Quando estiver ativado, o formulário de contato da página para empresas vai entregar as mensagens no meu e-mail pelo Resend, um serviço de envio de e-mails dos Estados Unidos; até lá, ao enviar, ele mostra o meu endereço de e-mail. Este site não guarda nem registra nada do que é enviado. Cada campo é validado no servidor, o formulário só aceita requisições deste site, um campo-armadilha escondido barra robôs simples, e limites de 3 mensagens por hora por conexão e 20 por dia seguram enxurradas — se o limitador não responder, o formulário se recusa a enviar.
Cabeçalhos de segurança
Uma Content Security Policy que só permite scripts, estilos, fontes e conexões do próprio site; HTTPS obrigatório com HSTS; sem MIME sniffing; uma política de referrer restrita; câmera, microfone, localização e pagamentos desativados; e nenhum outro site pode incorporar estas páginas em um frame.
Nenhuma requisição a terceiros até você dar play
Visitar o site não aciona nenhum terceiro: as fontes e as capas dos vídeos são servidas pelo próprio site, e a Content Security Policy garante isso. Os dois vídeos de projetos carregam do YouTube, no modo de privacidade aprimorada (youtube-nocookie.com), só quando você aperta play.
Toda mudança passa pelas mesmas checagens
Cada mudança é um pull request que precisa passar por lint, build de produção, smoke test no navegador, auditoria de dependências, varredura de segredos em todo o histórico do git (gitleaks) e análise estática com CodeQL. A branch principal é protegida sem exceção para admins — nem o dono consegue fazer push direto. O Dependabot sugere atualizações, e as actions do CI estão fixadas em hashes de commit exatos. A auditoria que montou tudo isso também encontrou uma vulnerabilidade crítica do Next.js na versão em produção (GHSA-vcvr-r3jv-pc5j), corrigida no mesmo dia.
Dados pessoais
O CV público é gerado sem número de telefone — o gerador se recusa a criá-lo se houver um — e o histórico do git foi reescrito para remover o número de todos os commits antigos.
Limitações conhecidas
- A Content Security Policy ainda permite scripts inline (‘unsafe-inline’). As páginas estáticas do Next.js precisam deles; removê-los exigiria renderizar cada página sob demanda.
- Os limites são por endereço IP, então alguém com muitos endereços poderia espalhar as requisições. O teto diário e o limite de gasto seguram o custo.
- As respostas da IA ainda podem exagerar. O assistente se baseia só no conteúdo deste site e é instruído a não enfeitar — confirme qualquer ponto importante diretamente comigo.
- O CDN da Vercel marca os arquivos estáticos públicos como legíveis por qualquer site (Access-Control-Allow-Origin: *). Isso é inofensivo para conteúdo público; o endpoint do assistente usa a própria lista de origens permitidas.
- O formulário de contato não tem CAPTCHA, que exigiria um script de terceiros. O campo-armadilha só barra robôs simples; os limites por hora e por dia seguram o resto.
Relatar uma vulnerabilidade
Encontrou um problema? Mande um e-mail para simonrl865@gmail.com — o endereço também está em /.well-known/security.txt. Por favor, não abra uma issue pública para problemas de segurança.
Modelo de ameaças completo: SECURITY.md no GitHub (em inglês) ↗