
Guarda-corpo de injeção de prompt para aplicações LLM. Modelo compacto que supera guardas open-source maiores. Sem regex, sem assinaturas. Demo: anton.securelayer7.net
Firewall minúsculo contra injeção de prompt para aplicativos de chat com LLM. ~14 MB. Somente CPU. Protetor plugável entre sua entrada de usuário e seu LLM — roda na mesma máquina, sem GPU, sem API, sem serviço extra.
Construído pela SecureLayer7 red-team. A maioria das proteções OSS tem centenas de MB, querem GPU e ainda assim perdem os ataques que vemos em produção. Precisávamos de algo que pudéssemos enviar dentro de nossos próprios produtos de IA e dos aplicativos de nossos clientes sem nada disso.
Comparação de benchmark com baselines OSS → docs/BENCHMARKS.md.
# SDK (zero-dep, ~50 KB) — firewall estrutural + bundle para navegador
npm i promptpurify
# Adiciona o modelo (~14 MB ONNX) para o guarda de injeção de chat
npm i onnxruntime-node
curl -L -o promptpurify-model.tar.gz \
https://github.com/securelayer7/PROMPTPurify/releases/download/v0.0.1/promptpurify-model.tar.gz
curl -L -o promptpurify-model.tar.gz.sha256 \
https://github.com/securelayer7/PROMPTPurify/releases/download/v0.0.1/promptpurify-model.tar.gz.sha256
sha256sum -c promptpurify-model.tar.gz.sha256 # DEVE imprimir "OK"
tar xzf promptpurify-model.tar.gz # cria models/l5e/
O modelo não está no tarball npm — o SDK permanece pequeno para quem só quer o firewall estrutural (navegador, edge, RAG). Opções completas de distribuição: docs/SAMPLE-DATA.md.
import { createL5eRunner } from "promptpurify/l5";
const guard = await createL5eRunner();
// No seu handler /chat:
const score = await guard.score(userMessage);
if (score >= 0.95) return refusal(); // bloqueio rígido
if (score >= 0.85) flagForReview(userMessage); // consultivo
const reply = await yourLLM.complete(userMessage); // passagem direta
Funciona com Groq, OpenAI, Anthropic, vLLM, LLMs locais — promptpurify nunca fala com seu LLM, apenas com sua entrada.
Para o firewall estrutural determinístico (neutralização Unicode, mensagens com delimitação de função, guarda de exfiltração de saída) veja docs/QUICKSTART.md.
Construímos nosso modelo a partir de inicialização aleatória porque nenhuma proteção OSS existente nos deu o tradeoff de tamanho / latência que queríamos para enviar em nossos próprios produtos.
Visão geral da arquitetura completa → docs/HOW-IT-WORKS.md.
Executamos um desafio adversarial ao vivo em anton.securelayer7.net. Pergunte ao Filho de Anton pela senha. Se você conseguir passar pela proteção, conte-nos como — SECURITY.md.
Um chatbot de suporte ao cliente fintech configurado com promptpurify, pronto para executar localmente:
cd examples/customer-support && npm install
GROQ_API_KEY=gsk_... node server.mjs
# http://localhost:8787
Veja examples/customer-support/README.md.
.safe.Tudo o que enviamos é assinado e verificável de ponta a ponta:
npm audit signatures # ✓ assinatura de registro verificada + atestado de proveniência
*.cosign.bundle),
um atestado de proveniência de build SLSA, um manifesto SHA256 e um
SBOM CycloneDX (SBOM.cdx.json).models/l5e/SHA256SUMS — todos os artefatos com checksum;
verificado no CI em cada PR.Se alguma dessas verificações falhar no seu lado, o pacote não é promptpurify — registre um relatório de segurança em SECURITY.md.
O nome e a filosofia de design são inspirados por DOMPurify por Cure53 — a mesma ideia, aplicada a prompts de LLM em vez de HTML. Agradecimentos a Mario Heiderich por sugerir o nome.
MIT para o SDK e os pesos do modelo. As fontes de benchmark que avaliamos estão listadas em training/CORPUS_LICENSES.json.
Divulgações de segurança: SECURITY.md.
| promptpurify | proteção OSS típica |
|---|
| Tamanho da instalação | ~14 MB ONNX | 180 MB – 7 GB |
| Inferência | CPU, milissegundos de dígito único | GPU recomendada |
| Onde executa | No seu processo Node | Sidecar ou API hospedada |
| Custo por chamada | $0 | $ ou computação GPU |