Faille XSS (Cross-Site Scripting)

Imaginons le cas d'une page web qui fait du AJAX ou du Fetch.
Un utilisateur saisit quelque chose dans un formulaire et son texte est stocké sur le serveur.

Plus tard, le serveur envoie ces données au client:
<?php
echo $str;
?>
Le client met alors à jour une partie de la page avec
document.getElementById('main').innerHTML = xhr.responseText;
Le problème est ici: si au lieu de son nom l'utilisateur a saisi
<script>
alert("attaque");
</script>
ou
<img src="http://monsite.fr/attaque.webp"> ← son serveur connait maintenant votre IP
Le HTML sera exécuté parce que .innerHTML parse le string.

C'est du Cross-Site Scripting : un internaute exécute son script à travers ton site.
Je saisis du code, il est envoyé au serveur, et quand il revient au client il est exécuté!

Les données du site proviennent: Une donnée malveillante peut arriver par Donc il vaut mieux utiliser .TextContent, ou Exemple au lieu de
table.innerHTML = `
<tr>
    <td>${client.nom}</td>
    <td>${client.email}</td>
</tr>`;
il vaut mieux faire avec .TextContent:
const tr = document.createElement("tr");
const td = document.createElement("td");
td.textContent = client.nom;
tr.appendChild(td);
table.appendChild(tr);

Javascript peut utiliser .innerHTML si le contenu ne provient pas d'