使用ngSanitize允许某些样式属性

时间:2014-09-15 09:42:21

标签: javascript css angularjs

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

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

2 个答案:

答案 0 :(得分:14)

阅读ngSanitize的文档,看起来好像它使用两个白名单来确定要阻止的数据(described here, in $compileProvider)。

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

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

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

编辑:

仔细查看$sanitize source code,看起来它设置为允许样式标记的内容,而不是样式属性。除非您更改源代码,否则样式属性将被清理删除。但是,课程不会被剥夺,所以你可能会有一个解决方法。 (事实上​​,通过允许类而不是内联样式,您可以在注释部分中限制样式用法。)

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

答案 1 :(得分:14)

textAngular处的人们有一个ng-sanitize分支,它将允许样式属性。使用他们的版本而不是ng-sanitize。