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