我使用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应该做什么?
答案 0 :(得分:2)
AngularJS使用
Function(string)
生成的函数作为速度优化。应用ngCsp指令将使Angular使用CSP兼容模式。当此模式打开时,AngularJS将评估所有表达式比非CSP模式慢30%,但不会引发任何安全违规。
这意味着使用ng-csp
将改变 Angular 行为的方式,因为它会手动处理事物而不是基于eval
的快捷方式。如果您在文档中使用CSP,这将非常有用。
改变JavaScript的工作原理并不是一种神奇的方式。