𝗥𝗲𝗮𝗰𝘁 𝘃𝘀. 𝗫𝗦𝗦: 𝗢𝗻𝗱𝗲 𝗮𝘀 𝗽𝗿𝗼𝘁𝗲çõ𝗲𝘀 𝘁𝗲𝗿𝗺𝗶𝗻𝗮𝗺
O React é seguro por padrão. Ele faz o escape de valores no JSX para impedir a maioria das injeções de script. Mas isso cria uma falsa sensação de segurança. O React reduz o risco de XSS, mas não o elimina.
Existem três tipos principais de ataques XSS:
- Reflected XSS: Um invasor envia um link malicioso. O servidor envia o script de volta para o usuário imediatamente. O navegador executa o script porque parece que ele veio de um site confiável.
- Stored XSS: O invasor salva um script no seu servidor. Ele reside no seu banco de dados, comentários ou logs. Todo usuário que visualizar esse conteúdo executará o script.
- DOM Based XSS: O ataque acontece inteiramente no navegador. O invasor altera parâmetros de URL ou entradas do lado do cliente para fazer seu JavaScript se comportar de forma maliciosa.
Do que o React realmente te protege?
- Escaping Automático: O React trata strings como texto puro. Se você tentar injetar uma tag de script no JSX, o React exibirá o texto em vez de executar o código.
- Renderização Segura: O React gerencia como o conteúdo aparece. Isso reduz a necessidade de usar APIs perigosas do navegador.
- Menos Manipulação do DOM: O React cuida das atualizações. Você não precisa usar
document.write()ouinnerHTMLcom tanta frequência.
O React oferece mecanismos de escape. Se você os usar incorretamente, criará vulnerabilidades.
Cuidado com estes erros:
- dangerouslySetInnerHTML: Esta propriedade diz ao React para pular o escape. Ela insere o HTML exatamente como ele é. Se o conteúdo não estiver limpo, um invasor vencerá. Use o DOMPurify para sanitizar seu conteúdo primeiro.
- Manipulação Direta do DOM: Se você usar element.innerHTML com entrada de usuário, você contornará toda a segurança do React.
- Bibliotecas de Terceiros: Algumas ferramentas externas podem não seguir as mesmas regras de segurança.
O React fornece as ferramentas para a segurança. Você deve usá-las corretamente. A segurança é sua responsabilidade.
Fonte: https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2