如果完全禁用$ sce服务,会发生什么不好的情况?
angular.module('app').config(function ($sceProvider) {
$sceProvider.enabled(false);
});
最佳答案
仅在您100%确定所有应用程序绑定(bind)(HTML,URL ...)是安全的时,才应禁用SCE。例如,如果应用程序始终在渲染之前清理服务器或客户端上的用户输入,则可能不需要由SCE强制执行的附加仪式。
但是,很少有人会百分百肯定所有值都是安全的,尤其是当应用程序变大并由许多开发人员编写代码时。启用SCE会强制应用程序只能使用$sce.trustAsXXX
方法之一明确标记为受信任的值。
例如,如果您使用ngBindHtml
渲染一些HTML,除非分配给ngBindHtml
的scope变量被$sce.trustAsHtml
包装,否则AngularJS将引发错误。当您设置路线或指令的templateUrl
时,也会发生类似的强制执行。这可以通过快速失败来提高应用程序的安全性,使您有机会审核发生错误的每个位置并决定是否信任或修复该错误。
最后一点,如果您包括ngSanitize
或实现$sanitize
服务,则无需禁用SCE以使用不受信任的HTML值,因为AngularJS会使用$sanitize
服务来清理不受信任的输入。同样,如果模板URL与应用程序共享原点,则无需显式包装它。
关于angularjs - 禁用$ sce服务缺陷,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26939168/