2014-09-15 7 views
16

Ich verwende ngSanitize in einer AngularJS-Anwendung, um unerwünschte oder gefährliche Teile zu entfernen. Der Inhalt wird jedoch mit einem HTML-Richtext-Editor generiert und enthält einige Stilinformationen, die entfernt werden (z. B. die Textfarbe).Erlaube bestimmte Stilattribute mit ngSanitize

Ich weiß, dass es nützlich ist, inlined CSS-Stile zu entfernen, aber ich würde eine Whitelist mit CSS-Attributen bevorzugen, die nicht entfernt werden. Gibt es eine Möglichkeit, dies zu erreichen, ohne alle CSS-Attribute zu vergeben?

+0

Sollten Sie die Serverseite nicht bereinigen? –

+0

@MattWay können Sie Recht haben, aber die Alternative wäre, das inlined CSS zu analysieren und das Element durch einige Formatierung HTML-Tags zu wickeln, aber ich wäre nicht in der Lage, z. Setze eine Schriftfarbe auf diese Weise, würde ich? – muffel

Antwort

13

Beim Lesen der Dokumentation für ngSanitize sieht es so aus, als ob es zwei Whitelists verwendet, um zu bestimmen, welche Daten blockiert werden sollen (described here, in $compileProvider). Die zwei weißen Listen sind aHrefSanitizationWhitelist([regexp]) und imgSrcSanitizationWhitelist([regexp]). Es sieht jedoch so aus, als ob diese beiden nur URLs für Links behandeln, um XSS-Angriffe zu verhindern.

Sie können sce.trustAsHtml() (oder möglicherweise data-bind-html-unsafe, wenn das immer noch eine Sache ist, aber ich denke, das ist veraltet), aber das ist nicht genau das, was Sie wollen; Das würde dich für alles HTML öffnen, sicher oder unsicher.

Es könnte sich lohnen, die documentation for $sce zu überprüfen. Wenn man es so weit betrachtet, gibt es eine Option, CSS zu umgehen, aber ich bin mir nicht sicher, ob es Inline-CSS in einem HTML-Tag entkommen würde. Bisher sehe ich keine Möglichkeiten, eine Whitelist für die parseAs-Methode bereitzustellen.

Edit:

die $sanitizesource code Blick durch, es sieht aus, als ob es gesetzt ist Tags, Sachen in der Art zu ermöglichen, aber nicht Stil Attribute. Stilattribute werden bereinigt, sofern Sie den Quellcode nicht ändern. Klassen werden jedoch nicht entfernt, sodass Sie möglicherweise einen Workaround haben. (In der Tat, indem Sie Klassen und nicht Inline-Stile zulassen, können Sie Stilnutzung möglicherweise in Ihrem Kommentarabschnitt einschränken.)

Die einzige andere Alternative wäre, Ihre eigene zu rollen, es scheint, es sei denn, jemand hat bereits.

+0

Stil wurde von Sanitize gelöscht, aber Klasse ist in meinem Fall erlaubt, sollte auch anderen helfen. –

12

Die Leute um textAngular haben eine Gabelung von ng-sanitize, die für Stilattribute erlauben wird. Verwenden Sie ihre Version anstelle von ng-sanitize.

Verwandte Themen