我在AngularJS应用程序中使用ngSanitize
来删除不需要的或危险的部分。但是,内容是使用HTML Richtext编辑器生成的,并包含一些样式信息,这些信息将被删除(例如文本颜色)。
我知道删除内联CSS样式很有用,但我更喜欢带有CSS属性的白名单,这些属性不会被删除。有没有办法在不授予所有CSS属性的情况下实现这一目标?
答案 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。