使用ngSanitize允许某些样式属性

muf*_*fel 17 javascript css angularjs

ngSanitize在AngularJS应用程序中使用以删除不需要的或危险的部分.但是,内容是使用HTML Richtext编辑器生成的,并包含一些样式信息,这些信息将被删除(例如文本颜色).

我知道删除内联CSS样式很有用,但我更喜欢带有CSS属性但不会被删除的白名单.有没有办法在不授予所有CSS属性的情况下实现这一目标?

jed*_*ung 14

阅读ngSanitize的文档,看起来它使用两个白名单来确定要阻止的数据(在此处描述$compileProvider).

这两个白名单是aHrefSanitizationWhitelist([regexp])imgSrcSanitizationWhitelist([regexp]).但是,看起来这两个只处理链接的URL以防止XSS攻击.

你可以使用sce.trustAsHtml()(或者,data-bind-html-unsafe如果这仍然是一件事,但我认为已经弃用了),但这并不是你想要的; 这将打开你所有的HTML,安全或不安全.

查看文档$sce可能是值得.到目前为止看,它有一个转义CSS的选项,但我不确定它是否会在HTML标记中转义内联CSS.到目前为止,我看不到为该parseAs方法提供白名单的选项.

编辑:

查看$sanitize 源代码,看起来它设置为允许样式标记中的东西,但不允许样式属性.除非您更改源代码,否则样式属性将被清理删除.但是,类不会被剥离,因此您可能会在那里找到解决方法.(事实上​​,通过允许类而不是内联样式,您可以在注释部分中限制样式用法.)

除非有人已经拥有,否则唯一的另一种选择就是滚动自己.


hen*_*lle 14

在乡亲textAngular有NG-sanitize方法,将允许样式属性的一个分支.使用他们的版本而不是ng-sanitize.