Questão de Arquitetura de Software — Software — FCC 2023
Arquitetura de Software›Software
Código
fc070431
Banca
FCC
Órgão
TRT - 21ª Região (RN)
Ano
2023
Nível
Superior
Cargo
Analista Judiciário - Área: Apoio Especializado - Tecnologia da Informação
Uma das técnicas para proteger um campo de uma página HTML de ataque de Cross-Site Scripting (455) é executar uma operação de substituição no valor string de entrada para sanilizar os caracteres < e >. Considere o script JavaScript abaixo.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Sanitização de entrada para prevenir XSS em JavaScript
Gabarito: letra E. Para sanitizar uma string contra Cross-Site Scripting (XSS), o comando correto é input.replace(/</g, "<").replace(/>/g, ">"), que substitui globalmente (flag g) todos os caracteres < e > por suas entidades HTML (< e >), impedindo que o navegador interprete o conteúdo como marcação. As demais alternativas usam métodos inexistentes ou sintaxe inválida do JavaScript.
O ataque XSS ocorre quando dados fornecidos pelo usuário são inseridos no DOM sem tratamento, permitindo que scripts maliciosos sejam executados. A técnica de sanitização descrita no enunciado substitui os caracteres < e > — os delimitadores de tags HTML — por entidades seguras. O método replace() do JavaScript aceita uma expressão regular ou uma string como primeiro argumento e o texto de substituição como segundo. Para substituir todas as ocorrências, é necessário usar a flag global g na expressão regular. A alternativa E faz exatamente isso: primeiro substitui todos os < por < e depois todos os > por >. O resultado é que o conteúdo é exibido como texto puro, sem ser interpretado como HTML.
1replace(/</g, "<")
2replace(/>/g, ">")
3textContent exibe texto puro
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
input.replace("<" || ">", "") — O operador || não funciona como "ou" dentro de uma string; ele avalia a expressão "<" || ">" e retorna "<" (o primeiro valor truthy). Além disso, sem a flag g, apenas a primeira ocorrência seria substituída, e a substituição por string vazia removeria o caractere em vez de convertê-lo em entidade, o que não sanitiza corretamente.
Alternativa B — ❌ Incorreta
input.sanitize(/</g, "<").sanitize(/>/g, ">") — O método sanitize()não existe no JavaScript. O método correto é replace(). Além disso, a sintaxe de encadeamento está correta, mas o método é inválido.
Alternativa C — ❌ Incorreta
input.sanitize("<", "<").sanitize(">", ">") — Novamente, sanitize() não existe. Mesmo que fosse replace(), substituir < por < e > por > não altera nada — não há conversão para entidades HTML.
Alternativa D — ❌ Incorreta
input.sanitizeAll("<" || ">", "") — O método sanitizeAll() não existe no JavaScript. Além disso, o operador || retorna apenas "<", e a substituição por string vazia removeria o caractere, não o convertendo em entidade.
Alternativa E — ✅ Correta ⟵ GABARITO
input.replace(/</g, "<").replace(/>/g, ">") — Utiliza o método replace() com expressões regulares globais (/</g e />/g), substituindo todas as ocorrências de < por < e de > por >. Isso neutraliza a interpretação de tags HTML, prevenindo XSS. O encadeamento é válido e a ordem não interfere no resultado final.
NÃO CAIA NESSA!
A banca explora a confusão entre métodos que não existem no JavaScript (sanitize, sanitizeAll) e o uso incorreto do operador || dentro de strings. O candidato que não domina a API de strings do JavaScript pode ser induzido a escolher uma alternativa com aparência plausível. Lembre-se: o método é replace(), e para substituir todas as ocorrências é obrigatória a flag g na expressão regular.
PEGA ESSA DICA!
Para memorizar a sanitização de XSS, lembre-se do par: < vira < e > vira >, sempre com replace(/</g, ...) e replace(/>/g, ...). Na prova, desconfie de métodos como sanitize ou sanitizeAll — eles não fazem parte do JavaScript padrão. Se a alternativa usar || dentro de uma string, está errada: || é operador lógico, não seletor de caracteres.