Ho letto sulla strada di angolare di sfuggire tutto per default e $sce
, così I bianco-list dati con $sce.trustAsHtml()
attraverso il filtro (dal $sce
non sta funzionando in servizio), in questo modo:parziale stringa HTML fuga in Angular.js
<sup class="ng-binding" ng-bind-html="row|logEntry"></sup>
Ma il problema è che non mi fido di alcune parti dell'HTML.
Per immergersi nei dettagli: ho translations che contiene HTML, ma in essi sono presenti token/variabili sostituibili. Quindi, translations support HTML, ma non voglio che i token forniti includano HTML.
mio filtro logEntry
sembra internamente come questo:
var translated = $translate('Log.' + msg.context.entity_type) + '.' + msg.context.action, {
'object_name': msg.context.object_name,
'user': msg.context.user_name
});
return $sce.trustAsHtml(translated);
Per esempio posso avere traduzione su userX cambiare l'articolo, ma non voglio testo del risultato per attivare alert() se il nome di utente include <script>alert('evilname')</script>
$translate
di per sé non è rilevante, può essere una stringa HTML in cui voglio sostituire alcune parti con il normale JS .replace()
con contenuto che rimane "come testo".
Quindi la mia domanda è - come posso evitare parti di HTML? Devo ricorrere a affettarlo in parti all'interno di una vista? O devo ricorrere alla fuga personalizzata ( Fastest method to escape HTML tags as HTML entities?)? Esiste una pratica preferita per queste cose? inizio