2015-06-10 2 views
0

У меня есть веб-страница в AngularJS, и я хочу выполнить некоторые проверки на самой стороне клиента. Поэтому я сравниваю значения $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 

После успешно выполнив эту команду, я получу предупреждение как Успех. Я создал образец страницы для целей тестирования: http://keval5531.github.io/angular.html

Итак, можно ли отключить доступ или манипулировать до $scope? Я всегда могу использовать сервер для проверки, но я уверен, что должен быть какой-то способ сохранить надежную проверку на стороне клиента.

EDIT: Я имею в виду нечто похожее на безупречное, что потребует больше усилий и опыта для пользователя, чтобы манипулировать отправляемыми данными, а не только манипулированием DOM.

+3

Никогда не доверять клиенту. Никогда. Валидация на стороне клиента отлично подходит для немедленной обратной связи. Если вам нужна проверка подлинности с ошибкой, вы абсолютно должны это сделать на сервере. –

+0

Да, для всего, что будет стоить мне, я добавил проверку на стороне сервера, которая всегда будет отключать пользователя от выполнения действий после достижения предела. Но я был обеспокоен тем, что манипулировать данными в браузере не так просто. Я знаю, что пакеты можно легко манипулировать перед отправкой, но мне нужны были некоторые меры предосторожности для дальнейших проверок в моей системе, что было бы тривиально. – Keval

+0

Я знаю, что вы пытаетесь сделать, но это напрасно. Отображения URL-адресов являются общедоступными. Традиционный веб-браузер может отправлять HTTP-запросы, или кто-то может использовать CURL для HTTP-запросов. Поэтому, если безопасность вас беспокоит, я не буду беспокоиться о том, что пользователи, пытающиеся манипулировать вашей клиентской стороной данных, не будут беспокоиться. –

ответ

1

Вы никогда не сможете обеспечить надежную проверку надежности на стороне клиента. Но чтобы ответить на ваш конкретный вопрос о том, можно ли ограничить доступ к сфере действия - да, в некоторой степени (с 1.3+). Вы можете отключить данные отладки, которые batarang и другие плагины используют на disabling the debug info. С этим функция доступа scope() больше не будет прикрепляться к элементу DOM. Цель этого заключается не в обеспечении безопасности, а в производительности. Держите проверки на стороне сервера достаточно сильными, чтобы блокировать любую попытку.

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

Однако следует знать, что кто-нибудь может перезагрузить приложение с отладочной информацией из консоли с:

angular.reloadWithDebugInfo(); 
+0

Да, у меня есть проверки на стороне сервера везде, где это необходимо. Я знаю, что клиентские пакеты можно манипулировать, что потребует опыта, но мне было интересно, что манипулировать '$ scope' не так просто. По-прежнему будет копаться, чтобы усложнить ситуацию, чтобы сохранить усилия сервера по обработке * плохих * запросов. – Keval

Смежные вопросы