Pular para o conteúdo principal

Questão de Arquitetura de Software — Software — FCC 2023

Arquitetura de SoftwareSoftware
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.


<script>

var sanitizado;

function sanitizar (input) {

sanitizado = TI

document.getElementById ("output") .textContent = sanitizado;

}

</script>


Para sanilizar o conteúdo da string input a lacuna I deve ser preenchida pelo comando

  1. Ainput.replace("<" || ">", "")
  2. Binput.sanitize(/</g, "&lt;").sanitize(/>/g, "&gt;")
  3. Cinput.sanitize("<", "<").sanitize(">", ">")
  4. Dinput.sanitizeAll ("<" ||">", "")
  5. Einput.replace(/</g, "&lt;").replace(/>/g, "&gt;")
Revelar gabarito e comentário

GabaritoE — input.replace(/</g, "&lt;").replace(/>/g, "&gt;")

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, "&lt;").replace(/>/g, "&gt;"), que substitui globalmente (flag g) todos os caracteres < e > por suas entidades HTML (&lt; e &gt;), 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 &lt; e depois todos os > por &gt;. O resultado é que o conteúdo é exibido como texto puro, sem ser interpretado como HTML.

  1. 1replace(/</g, "&lt;")
  2. 2replace(/>/g, "&gt;")
  3. 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, "&lt;").sanitize(/>/g, "&gt;") — 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, "&lt;").replace(/>/g, "&gt;") — Utiliza o método replace() com expressões regulares globais (/</g e />/g), substituindo todas as ocorrências de < por &lt; e de > por &gt;. 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 &lt; e > vira &gt;, 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.

Gabarito: letra E

Link permanente: /questoes/fc070431