0

AngularJS に Web ページがあり、クライアント側自体でいくつかの検証を実行したいと考えています。そこで、$scopeの値を比較して、ユーザーのイベントを検証します。例えば:

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

ただし、[要素$scope] タブで要素を選択し、コンソールで次のコマンドを実行すると、にアクセスして変更することができます。

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 以降)。debug info を無効にすることで、batarang や他のプラグインが使用するデバッグ データを無効にすることができます。そのscope()アクセサ関数を使用すると、DOM 要素にアタッチされなくなります。これの目的は安​​全性を提供するためではなく、パフォーマンスのためです。そのような試みをブロックするために、サーバー側の検証を十分に強力に保ちます。

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

ただし、誰でもコンソールからデバッグ情報を使用してアプリをリロードできることに注意してください。

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