Angular $ sce vs外部区域设置文件中的HTML
有关ng-bind-html
问题,同时将Angular应用从1.0.8升级到1.2.8:
我将语言环境字符串存储在名为en_GB.json
, fr_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"
。
问题:
你不会让你的应用程序更安全。 您已经使用ng-bind-html-unsafe的旧方法在您的页面中插入HTML。 您仍然在做同样的事情,除非现在您必须明确信任HTML的源代码 ,而不是只指定模板的那部分可以输出原始HTML。 要求使用$ sce会使意外地接受来自不可信来源的原始HTML变得更加困难 - 在旧方法中,您只声明模板中的信任,不好的输入可能会以您没有想到的方式进入您的模型。
如果内容来自您的域名或您所控制的域名,那么您是安全的 - 至少和您一样安全。 如果某人以某种方式能够强制自己的域名响应的有效负载,那么您的安全性已经被全部搞砸了。 但是,请注意,对于来自不属于您的域的内容,您绝对不应该致电$ sce.trustAsHtml。
除了可维护性问题之外,我没有看到你做这件事的方式有什么问题。 在JSON文件中生活大量的HTML可能并不理想,但只要标记语义合理且不太密集,我认为它很好。 如果标记变得复杂得多,我会考虑根据需要将它分解为独立的角模板文件或指令,而不是试图管理JSON字符串中包装的一堆标记。
上一篇: Angular $sce vs HTML in external locale files
下一篇: What is the idiomatic way for an SBT project to publish 2 artifacts?