@tslite/sanitize
v0.1.5
Published
TSLite sanitize — fail-closed AST guard against sandbox-escape surfaces (constructor/prototype/__proto__, dangerous globals) + own-only runtime member access. DEFENSE IN DEPTH, not a security boundary (see SECURITY.md).
Downloads
1,570
Maintainers
Readme
@tslite/sanitize
Guarda fail-closed contra superfícies de escape de sandbox no AST do TSLite —
constructor/prototype/__proto__, prototype pollution, identificadores de autoridade ambiente (eval/process/…) — + guardas de acesso a membro em runtime.
⚠️ Defesa em profundidade, NÃO uma fronteira de segurança. Um filtro de AST nunca é o sandbox (foi o que matou o
vm2). A fronteira real é executar a saída sob um realm endurecido (SESlockdown()/ isolated-vm) sem autoridade ambiente. LeiaSECURITY.md— é a parte mais importante.
import { assertSafe, HERMETIC_POLICY } from "@tslite/sanitize";
assertSafe(ast); // lança SanitizeError em construção insegura
assertSafe(ast, HERMETIC_POLICY); // + rejeita acesso computado dinâmicoJá vem ligado (default ON) nos backends:
evaluate(ast, env); // @tslite/interpret — assertSafe + guardKey em runtime
printWithProfile(ast, profile); // @tslite/printer — assertSafe antes de emitirO que ele pega
({}).constructor.constructor("return process")() // → SanitizeError (forbidden-key)
o.__proto__ / o["constructor"] / { __proto__: x } // → SanitizeError
eval / Function / process / require / globalThis // → SanitizeError (forbidden-identifier)
o[k] // k dinâmico → guardado em runtime (guardKey/safeGet) ou rejeitado (hermetic)E o que ele não pega (de propósito — são dado legítimo):
{ eval: 1 } // chave de dado chamada "eval" — ok
o.eval // membro de dado — ok
o["a"] / o[0] // acesso literal — okAPI
assertSafe(ast, policy?)— guarda fail-closed (lançaSanitizeError).findUnsafe/isSafe— versões puras (não-lançantes) pra tooling.DEFAULT_POLICY(guard) ·HERMETIC_POLICY(rejeita computado dinâmico).safeGet/safeSet/guardKey— guardas de acesso a membro em runtime (own-only / bloqueio do substrato), pro seu runner de execução.SAFE_GET_SRC/SAFE_SET_SRC/GUARD_KEY_SRC/prelude()— fontes inlináveis (saída auto-contida).
Detalhe completo em API.md · arquitetura em
docs/ARCHITECTURE.md · modelo de ameaça e a fronteira real em
SECURITY.md.
