Segurança
O Veloz fecha por padrão as brechas de XSS mais comuns, no navegador e na renderização no servidor.
Texto nunca vira HTML
Strings no JSX entram como nós de texto no navegador e são escapadas (& < > " ') no servidor. Entrada do usuário não consegue criar elementos.
const name = '<img src=x onerror=alert(1)>';
<p>Olá, {name}</p>; // mostra o texto, não executa nadainnerHTML é sanitizado
O innerHTML sempre passa pelo sanitize(): lista de tags e atributos permitidos, sem handlers on*, sem srcdoc, URLs inseguras trocadas por about:blank e rel="noopener noreferrer" nos links. Com Trusted Types disponível, a saída é embrulhada numa política veloz-sanitize.
import { sanitize } from '@velozjs/dom';
<article innerHTML={markdownHtml} />; // sanitizado automaticamente
sanitize(html, { allowedTags: new Set(['b', 'i']) }); // mais restrito, à mãoNo servidor, o innerHTML não é impresso; o cliente o define na hidratação.
URLs não executam script
href, src, action, formaction, srcset, poster, xlink:href e outros atributos de URL são verificados por uma única função, no cliente, no sanitizador e no SSR. Ela remove primeiro os caracteres que os navegadores ignoram ao ler o esquema da URL, então truques como java\tscript: são pegos.
javascript:evbscript:são sempre bloqueados.data:só é aceito para imagens raster (png,gif,jpeg,webp,avif,bmp) emsrc,posteresrcset.- Um valor rejeitado remove o atributo em vez de deixar um valor antigo no lugar.
Nomes de atributo são validados
Nomes com espaços, aspas, = ou > são rejeitados, então espalhar props vindas de dados que você não controla não injeta markup. O SSR também valida nomes de tag.
Handlers são funções
Handlers em string como onclick="..." são rejeitados. Os handlers ficam guardados fora do DOM e nunca são impressos pelo SSR.
CSP
Sem eval, new Function, document.write ou scripts inline. Os estilos em tempo de execução usam uma folha de estilo construída via JS. O CSS do servidor escapa </style, e o script de dados do renderToStringAsync escapa <, > e & e aceita um nonce.
O que continua sendo com você
- A verificação de URL bloqueia execução de script, não redirecionamentos abertos: valide destinos que vêm do usuário.
- Não coloque entrada não confiável em
cssoustylesem validar; não executa script, mas pode mudar a página.
Encontrou uma vulnerabilidade? Reporte em particular pelos avisos de segurança do GitHub.