即使使用了ng-csp指令,也会执行eval

时间:2014-06-18 10:44:28

标签: javascript angularjs content-security-policy

我使用ng-csp指令启用了ngCsp:

<body ng-app="PM" ng-csp ng-cloak>

为什么我仍然可以在代码中执行以下eval而没有任何角度错误?

$scope.searchform = {
    searchExpression : "alert('hi')"
}

$scope.handleChange = function () {
    eval($scope.searchform.searchExpression);
}

<input type="text" ng-model="searchform.searchExpression" ng-change="handleChange(searchform.searchExpression)">

我不明白ng-csp应该做什么?

1 个答案:

答案 0 :(得分:2)

  

AngularJS使用Function(string)生成的函数作为速度优化。应用ngCsp指令将使Angular使用CSP兼容模式。当此模式打开时,AngularJS将评估所有表达式比非CSP模式慢30%,但不会引发任何安全违规。

From the Docs

这意味着使用ng-csp将改变 Angular 行为的方式,因为它会手动处理事物而不是基于eval的快捷方式。如果您在文档中使用CSP,这将非常有用。

改变JavaScript的工作原理并不是一种神奇的方式。