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

eval gets executed even thought ng-csp directive is used

本文关键字:Eval 执行 指令 ng-csp      更新时间:2023-09-26

我已经使用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应该做什么?

AngularJS使用Function(string)生成的函数作为速度优化。应用ngCsp指令会导致Angular使用CSP兼容模式。当该模式开启时,AngularJS对所有表达式的求值速度会比非csp模式慢30%,但不会引发安全违规。

From the Docs

这意味着使用ng-csp将改变Angular的行为,因为它将手动处理事情,而不是采取基于eval的快捷方式。如果你在你的文档上使用CSP,这是很有用的。

这不是改变JavaScript工作方式的神奇方法