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>
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.
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 ;-)