angularjs - 禁用 $sce 服务缺点

标签 angularjs security escaping template-engine side-effects

如果我完全禁用 $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/

相关文章:

mysql - 在插入数据库之前清理字符串

javascript - 设置 Angular js 应用程序 index.html 页面以仅包含单个 Controller

angularjs - OpenLayers v3.5.0 map ,使用 bbox 策略从 GeoJSON 加载特征

css - Wordpress 和 IE9 中的双重安全

java - Android:替换缺少的安全架构

security - Spring 安全性 - SecurityContext.authentication 在 taglib 和 jsp 中为 null,但在 Controller 中还可以

bash - 在未转义的换行符后在 bash 中拆分文件

javascript - anchor href 中的 innerHTML 和 C%23 (C#) - Firefox

javascript - 具有日期格式的 angularjs ng-options

使用 ng-repeat 时的 AngularJS 数据绑定(bind)