CodeQL 文档

缺少显式依赖注入

ID: js/angular/missing-explicit-injection
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - correctness
   - maintainability
   - frameworks/angularjs
Query suites:
   - javascript-security-and-quality.qls

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

当 AngularJS 将依赖项注入到没有显式依赖项规范的函数时,它会通过名称将依赖项与函数参数匹配起来。 这样做很危险,因为某些源代码转换(如代码缩减)可能会更改参数的名称。 此类重命名将破坏 AngularJS 应用程序。

建议

当代码稍后会被缩减时,不要使用隐式注释来注释依赖注入函数。

示例

以下示例展示了一个带有隐式依赖项注释的 AngularJS 控制器。

angular.module('myModule', [])
    .controller('MyController', function($scope) { // BAD: implicit dependency name
        // ...
});

这是有问题的,因为该控制器的缩减版本可能如下所示

angular.module('myModule', [])
    .controller('MyController', function(a) { // BAD: dependency 'a' does not exist
        // ...
});

这意味着该函数将使用名为“a”的依赖项进行依赖注入,而该依赖项并不存在,这会导致运行时崩溃。

相反,为了支持代码缩减,请使用显式注释指定依赖项

angular.module('myModule', [])
    .controller('MyController', ['$scope', function($scope) { // GOOD: explicit dependency name
        // ...
}]);

参考

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