web-dev-qa-db-fra.com

Est-il sûr d'utiliser [innerHTML] dans Angular 5?

J'ai vu des rapports contradictoires selon lesquels il est dangereux d'utiliser la balise [innerHTML] dans Angular2 +. Est-ce toujours le cas ou a-t-il été corrigé depuis?

par exemple, ce code est-il dangereux:

<div [innerHTML]="post.body"></div>
8
ahat91

comme il l'a dit dans ici (dans angular lui-même), il semble qu'il n'y ait pas de soucis à ce sujet car angulaire, reconnaît automatiquement les valeurs dangereuses et les désinfecte.

voici ce qui y est écrit:

Le contenu interpolé est toujours échappé: le code HTML n'est pas interprété et le navigateur affiche des crochets dans le contenu textuel de l'élément.

Pour que le HTML soit interprété, liez-le à une propriété HTML telle que innerHTML. Mais lier une valeur qu'un attaquant pourrait contrôler dans innerHTML provoque normalement une vulnérabilité XSS. Par exemple, le code contenu dans une balise <script> Est exécuté:

export class InnerHtmlBindingComponent { // For example, a user/attacker-controlled value from a URL. htmlSnippet = 'Template <script>alert("0wned")</script> <b>Syntax</b>'; }

Angular reconnaît la valeur comme non sûre et la désinfecte automatiquement, ce qui supprime la balise <script> Mais conserve le contenu sécurisé tel que le contenu textuel de la balise <script> Et l'élément <b>.

donc je pense que oui c'est sûr.

7
Seyed Ali Roshan

Je confirme.

Je viens d'essayer la <div [innerHTML]="<span (touch)=() => {alert('Code has been successfully executed on client from external malicious input');}">test xss</span>"></div> suivante

Rien n'est exécuté et l'inspection DOM montre que (toucher) a été retiré de la travée par angulaire. C'est parfait ;-)

4