Angular $ sce vs外部区域设置文件中的HTML

有关ng-bind-html问题,同时将Angular应用从1.0.8升级到1.2.8:

我将语言环境字符串存储在名为en_GB.jsonfr_FR.json等的文件中。到目前为止,我已允许在语言环境字符串中使用HTML,以允许编写本地化内容的团队应用基本样式或添加内联定位标记。 这将导致以下示例JSON:

{
  "changesLater":     "<strong>Don't forget</strong> that you can always make changes later." 
  "errorEmailExists": "That email address already exists, please <a href="login">sign in</a> to continue."
}

ng-bind-html="myStr"使用这些字符串时,我知道我现在需要使用$sce.trustAsHtml(myStr) 。 我甚至可以按照这个StackOverflow答案中的建议写一个过滤器,这会导致使用ng-bind-html="myStr | unsafe"

问题:

  • 通过这样做,我的应用程序现在不安全了吗? 如果是这样,攻击者如何利用这个?
  • 如果所显示的HTML字符串的来源是用户(即将向其他用户显示的博客帖子样式注释),我可以理解潜在的漏洞,但是如果我仅从HTML中显示HTML,我的应用程序真的会处于危险之中JSON文件托管在同一个域上?
  • 有没有其他方法可以在角度应用程序中实现外部加载的内容字符串的标记?

  • 你不会让你的应用程序更安全。 您已经使用ng-bind-html-unsafe的旧方法在您的页面中插入HTML。 您仍然在做同样的事情,除非现在您必须明确信任HTML的源代码 ,而不是只指定模板的那部分可以输出原始HTML。 要求使用$ sce会使意外地接受来自不可信来源的原始HTML变得更加困难 - 在旧方法中,您只声明模板中的信任,不好的输入可能会以您没有想到的方式进入您的模型。

  • 如果内容来自您的域名或您所控制的域名,那么您是安全的 - 至少和您一样安全。 如果某人以某种方式能够强制自己的域名响应的有效负载,那么您的安全性已经被全部搞砸了。 但是,请注意,对于来自不属于您的域的内容,您绝对应该致电$ sce.trustAsHtml。

  • 除了可维护性问题之外,我没有看到你做这件事的方式有什么问题。 在JSON文件中生活大量的HTML可能并不理想,但只要标记语义合理且不太密集,我认为它很好。 如果标记变得复杂得多,我会考虑根据需要将它分解为独立的角模板文件或指令,而不是试图管理JSON字符串中包装的一堆标记。

  • 链接地址: http://www.djcxy.com/p/76959.html

    上一篇: Angular $sce vs HTML in external locale files

    下一篇: What is the idiomatic way for an SBT project to publish 2 artifacts?