禁用 SCE¶
ID: js/angular/disabling-sce
Kind: problem
Security severity: 7.8
Severity: warning
Precision: very-high
Tags:
- security
- maintainability
- frameworks/angularjs
- external/cwe/cwe-116
Query suites:
- javascript-code-scanning.qls
- javascript-security-extended.qls
- javascript-security-and-quality.qls
AngularJS 通过自动清理和过滤可能导致漏洞(如 XSS)的不可信值,默认情况下是安全的。严格上下文转义 (SCE) 是 AngularJS 中的一种执行模式,它提供了此安全机制。
强烈建议不要在 AngularJS 应用程序中禁用 SCE。更不建议在库中禁用 SCE,因为它是一个应用程序范围的设置。
建议¶
不要禁用 SCE。
示例¶
以下示例显示了一个 AngularJS 应用程序,它禁用 SCE 以动态构建 HTML 片段,该片段稍后通过 $scope.html
插入到 DOM 中。
angular.module('app', [])
.config(function($sceProvider) {
$sceProvider.enabled(false); // BAD
}).controller('controller', function($scope) {
// ...
$scope.html = '<ul><li>' + item.toString() + '</li></ul>';
});
这存在问题,因为它会为整个 AngularJS 应用程序禁用 SCE。
相反,在将动态构建的 HTML 片段分配给 $scope.html
之前,只需使用 $sce.trustAsHtml
将其标记为安全即可。
angular.module('app', [])
.controller('controller', function($scope, $sce) {
// ...
// GOOD (but should use the templating system instead)
$scope.html = $sce.trustAsHtml('<ul><li>' + item.toString() + '</li></ul>');
});
请注意,此示例仅用于说明目的;尽可能使用 AngularJS 模板系统来动态构建 HTML。
参考¶
AngularJS 开发人员指南:严格上下文转义
AngularJS 开发人员指南:我可以完全禁用 SCE 吗?.
常见漏洞枚举:CWE-116.