CodeQL 文档

禁用 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

单击查看 CodeQL 代码库中的查询

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。

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私