Développement et architecture Web

Sanitizer API de Chrome 146 : afficher du HTML plus sûrement

Une développeuse travaille sur du code avec trois écrans à son bureau.

Un CMS fournit un paragraphe avec des liens et une mise en forme. Le frontend l’affiche, jusqu’au jour où ce champ contient aussi du code que le navigateur pourrait exécuter. La Sanitizer API de Chrome 146 facilite un rendu plus sûr. Mais pourquoi interpréter cette information comme du HTML ?

Le risque commence lors de l’insertion

Avec du contenu non fiable, innerHTML peut introduire une vulnérabilité XSS. Le problème ne vient pas de l’API qui transmet les données, mais de leur interprétation comme HTML actif. Pour un titre, un libellé ou un message, textContent traite la valeur comme du texte.

container.innerHTML = cmsContent;
container.textContent = userInput;

Quand le formatage est nécessaire

Un article peut exiger des paragraphes, des liens et des listes. Element.setHTML() analyse le contenu et supprime les constructions considérées comme dangereuses pour les XSS. Chrome a annoncé cette API en mars 2026 et mentionné également Firefox. L’exemple repose sur la documentation et n’a pas été exécuté dans plusieurs navigateurs.

const container = document.querySelector('#article');
const cmsContent = `<p>Hello</p><img src="x" onerror="alert('XSS')">`;
container.setHTML(cmsContent);

Une API native ne remplace pas une politique de contenu

Distinguez les champs de texte brut des contenus enrichis. Un composant label ne devrait pas interpréter du HTML arbitraire ; un composant de contenu riche peut appliquer une politique documentée. Examinez aussi les aperçus, extensions et outils d’administration.

Prévoir les navigateurs sans setHTML

MDN indique une disponibilité limitée. Détectez la méthode sur les navigateurs et webviews visés. Si elle manque, utilisez un outil de nettoyage maintenu et correctement configuré. Ne revenez jamais à innerHTML sans filtrage.

if ('setHTML' in Element.prototype) {
  container.setHTML(cmsContent);
} else {
  // Use a reviewed, safely configured sanitizer fallback.
}

Tester les attaques et les contenus légitimes

Vérifiez les attributs d’événement, les balises imprévues et les protocoles dangereux, mais aussi les liens, les listes et les tableaux autorisés. Testez l’accessibilité. Content Security Policy, l’encodage adapté au contexte et Trusted Types constituent des protections complémentaires.

Le gain principal vient souvent de la réduction des endroits où le système interprète du HTML non fiable. Limitez ces points d’insertion et protégez les autres de manière cohérente.

CMS architecture

Sources

Contactez-nous

Dites-nous comment nous pouvons vous aider ; nous répondons sous deux jours ouvrés.

Uniquement nécessaire si vous souhaitez être rappelé.
Pour le sponsoring, précisez votre entreprise et votre proposition. Pour une correction, ajoutez l’URL.

Nous utilisons vos données uniquement pour traiter cette demande.

Deel dit artikel

Deel dit artikel