禁用$ sce服务缺陷

art*_*ska 5 security template-engine escaping side-effects angularjs

如果我完全禁用$ sce服务会发生什么不好的事情?

angular.module('app').config(function ($sceProvider) {
    $sceProvider.enabled(false);
});
Run Code Online (Sandbox Code Playgroud)

Buu*_*yen 5

仅在您100%确定所有应用程序绑定(HTML,URL ...)是安全的时,才应禁用SCE。例如,如果应用程序始终在渲染之前清理服务器或客户端上的用户输入,则可能不需要由SCE强制执行的附加仪式。

但是,很少有人会百分百肯定所有值都是安全的,尤其是当应用程序变大并由许多开发人员编写代码时。启用S​​CE会强制应用程序只能使用使用其中一种$sce.trustAsXXX方法明确标记为受信任的值。

例如,如果您用于ngBindHtml呈现某些HTML,除非分配给作用域的作用域变量ngBindHtml用包裹,否则AngularJS将引发错误$sce.trustAsHtml。当您设置templateUrl路线或指令。这样可以通过快速失败来提高应用程序的安全性,使您有机会审核发生错误的每个位置并决定是否信任或修复该错误。

最后一点,如果您包含ngSanitize或实现一项$sanitize服务,则无需禁用SCE以使用不受信任的HTML值,因为AngularJS只会使用该$sanitize服务来清理不受信任的输入。同样,如果模板URL与应用程序共享原点,则无需显式包装它。