0

我在 AngularJS 中有一个网页,我想在客户端本身执行一些验证。所以我比较$scope的值并验证用户的事件。例如:

$scope.limit = 5;
$scope.reached = 5;
$scope.check = function () {
    if ($scope.reached >= $scope.limit) {
        alert("Sorry, limit reached.");
    } else {
        alert("Success!");
    }
};

但是,在Elements选项卡中选择元素然后在Console中运行此命令后,可以访问和更改$scopewith :

angular.element($0).scope().limit = 100;
//or by running $scope.limit = 100; if you're using Batarang

成功运行此命令后,我将收到Success的警报。我为测试目的创建了一个示例页面:http: //keval5531.github.io/angular.html

那么,是否可以禁用对 的访问或操作$scope?我总是可以使用服务器进行验证,但我确信必须有某种方法来保持万无一失的客户端验证。

编辑:我的意思是一些近乎万无一失的东西,这将需要用户更多的努力和专业知识来操作正在发送的数据,而不仅仅是 DOM 操作。

4

1 回答 1

1

您永远无法确保客户端的万无一失的验证安全性。但是要回答您关于是否可以限制访问范围的具体问题 - 是的,在某种程度上(使用 1.3+)。您可以通过禁用调试信息来禁用batarang 和其他插件使用的调试数据。使用该scope()访问器函数将不再附加在 DOM 元素上。这样做的目的不是为了提供安全性,而是为了性能。保持您的服务器端验证足够强大以阻止任何此类尝试。

.config(['$compileProvider', function ($compileProvider) {
  $compileProvider.debugInfoEnabled(false);
}]);

但是请注意,任何人都可以使用控制台中的调试信息重新加载应用程序:

angular.reloadWithDebugInfo();
于 2015-06-10T19:40:42.663 回答