Phi*_*ley 7 javascript xss angularjs
关于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."
}
Run Code Online (Sandbox Code Playgroud)
当使用这些字符串时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 字符串中的标记。