2014-09-15 13 views
16

Sto utilizzando ngSanitize in un'applicazione AngularJS per rimuovere parti indesiderate o pericolose. Tuttavia, il contenuto viene generato utilizzando un editor HTML Richtext e contiene alcune informazioni di stile, che vengono rimosse (ad esempio il colore del testo).Consentire determinati attributi di stile con ngSanitize

So che è utile rimuovere stili CSS incorporati, ma preferisco una lista nella whitelist con attributi CSS che non vengono rimossi. C'è un modo per ottenere questo senza concedere tutti gli attributi CSS?

+0

Non dovresti disinfettare il lato server? –

+0

@MattWay potresti avere ragione, ma l'alternativa sarebbe di analizzare il CSS integrato e avvolgere l'elemento con alcuni tag HTML di formattazione, ma non sarei in grado di farlo ad es. impostare un colore del carattere in questo modo, dovrei? Lo stile – muffel

risposta

13

Leggere la documentazione di ngSanitize, sembra che usi due whitelist per determinare quali dati bloccare (described here, in $compileProvider).

Le due whitelist sono aHrefSanitizationWhitelist([regexp]) e imgSrcSanitizationWhitelist([regexp]). Tuttavia, sembra che questi due gestiscano solo gli URL per i collegamenti per prevenire gli attacchi XSS.

È possibile utilizzare sce.trustAsHtml() (o, eventualmente, data-bind-html-unsafe se è ancora una cosa, ma penso che sia deprecato) ma non è esattamente quello che si desidera; questo ti aprirà a tutto il codice HTML, sicuro o non sicuro.

Potrebbe valerne la pena controllare lo documentation for $sce. Guardandolo fino ad ora, c'è un'opzione per l'escape del CSS, ma non sono sicuro che sfuggirebbe ai CSS in linea in un tag HTML. Finora, non vedo alcuna opzione per fornire una whitelist al metodo parseAs.

Edit:

Guardando attraverso il $sanitizesource code, sembra come se fosse impostato per consentire cose in grande stile tag, ma non lo stile attributi. Gli attributi di stile verranno eliminati da sterilizzare a meno che non si modifichi il codice sorgente. Le classi, tuttavia, non vengono rimosse, quindi potresti avere una soluzione alternativa. (In effetti, consentendo classi e non stili in linea, è possibile limitare l'utilizzo dello stile nella sezione commenti.)

L'unica altra alternativa sarebbe quella di eseguire il rollover, a quanto pare, a meno che qualcuno non lo abbia già.

+0

è stato eliminato da disinfettare, ma nel mio caso è consentita la classe, dovrebbe aiutare anche gli altri. –

12

Le persone oltre a textAngular hanno un fork di ng-sanitize che consentirà gli attributi di stile. Usa la loro versione invece di ng-sanitize.

Problemi correlati