Angular 我不知道';我无法理解SafeUrl/SafeStyle背后的概念

Angular 我不知道';我无法理解SafeUrl/SafeStyle背后的概念,angular,security,Angular,Security,不久前,我意识到我不能简单地将字符串传递给标记或背景样式的href参数。仅接受SafeUrl和SafeStyle实例。坦白地说,我不了解整个概念,因为我可以通过使用一个简单的调用来清理任何图像URL或样式。如果我可以建立一个安全的管道,将安全映像HREF从可靠的后端API编组到视图层,这可能是合理的。Buf@angular/platform browserAPI不能注入到服务中,所以我应该清理控件中的URL,在这些控件中,我缺少任何上下文来帮助我区分源代码的可靠性。也许我漏掉了什么东西? < P

不久前,我意识到我不能简单地将字符串传递给
标记或背景样式的href参数。仅接受
SafeUrl
SafeStyle
实例。坦白地说,我不了解整个概念,因为我可以通过使用一个简单的调用来清理任何图像URL或样式。如果我可以建立一个安全的管道,将安全映像HREF从可靠的后端API编组到视图层,这可能是合理的。Buf
@angular/platform browser
API不能注入到服务中,所以我应该清理控件中的URL,在这些控件中,我缺少任何上下文来帮助我区分源代码的可靠性。也许我漏掉了什么东西?

< P>消毒意味着你明确说出角度考虑内容安全。 这只是Angular的一个标记,由您负责,Angular不需要检查内容是否存在潜在的不安全内容。只有在您知道内容来源且不包含有害内容的情况下,才能对其进行“消毒”


这也是为什么您需要使用属性绑定表示法
[innerHTML]=“sanitizedContent
,对其进行绑定,因为使用
innerHTML=“{{sanitizedContent}}”
sanitizedContent
将其字符串化(
toString
调用)标记在这个过程中丢失了。

如果我从API中得到一个指向某个servlet的图像href,该servlet返回(比如)映射片段,我当然可以立即对其进行清理。但是我在我的应用程序范围内的服务中得到这些href,我无法注入Domsanizer。它会在下游混合,所以我别无选择,只能对所有内容进行清理,即使是它这可能是对返回不透明像素的恶意跟踪器脚本的引用。为什么不能在应用程序范围内的服务中注入DomSanitizer?我在某个地方读到,@angular/platform browser不应该用于服务中。我没有看到有人提到它,但我可以想象他们会建议它。但是“应该”“这个词不难;-)我们并不是生活在一个完美的世界里,是吗?我想最干净的方法是封装图像引用,并在视图层生成狭窄的转换器,比如ISatelliteImageFragment->SafeUrl,而不是string->SafeUrl。