JavaScript: проверка на стороне клиента и сервера



что лучше делать на стороне клиента или на стороне сервера проверки?



в нашей ситуации мы используем




  • jQuery и MVC.

  • данные JSON для передачи между нашим представлением и контроллером.


большая часть проверки, которую я делаю, проверяет данные по мере их ввода пользователями.
Например, я использую the keypress событие чтобы предотвратить появление букв в текстовом поле, установите максимальное количество символов и чтобы число находилось в диапазоне.



Я думаю, лучший вопрос был бы, есть ли какие-либо преимущества для выполнения проверки на стороне сервера на стороне клиента?





удивительные ответы все. Веб-сайт, который у нас есть, защищен паролем и для небольшой базы пользователей(

998   12  

12 ответов:

как говорили другие, вы должны делать и то, и другое. Вот почему:

На Стороне Клиента

вы хотите сначала проверить ввод на стороне клиента, потому что вы можете дать лучше обратная связь со средним пользователем. Например, если они вводят недопустимый адрес электронной почты и переходят к следующему полю, вы можете немедленно отобразить сообщение об ошибке. Таким образом, пользователь может исправить каждое поле до они представляют форму.

Если вы проверяете только на сервере, они должны отправить форму, получить сообщение об ошибке и попытаться выследить проблему.

(эта боль может быть облегчена, если сервер повторно отобразит форму с заполненным исходным вводом пользователя, но проверка на стороне клиента все еще быстрее.)

На Стороне Сервера

вы хотите проверить на стороне сервера, потому что вы можете защита от вредоносного пользователя, который может легко обойти ваш JavaScript и отправить опасный ввод на сервер.

очень опасно доверять своему пользовательскому интерфейсу. они не только могут злоупотреблять вашим пользовательским интерфейсом, но они могут вообще не использовать ваш пользовательский интерфейс или даже браузер. Что делать, если пользователь вручную редактирует URL, или запускает свой собственный Javascript, или настраивает свои HTTP-запросы с помощью другого инструмента? Что делать, если они отправляют пользовательские HTTP-запросы от curl или из скрипта, например?

(это не теоретически; например, я работал над поисковой системой путешествия, которая повторно представила поиск пользователя многие авиакомпании, автобусные компании и т. д., отправляя POST запросы, как если бы пользователь заполнил форму поиска каждой компании, а затем собрал и отсортировал все результаты. Форма JS этих компаний никогда не выполнялась, и для нас было важно, чтобы они предоставляли сообщения об ошибках в возвращенном HTML. Конечно, API было бы неплохо, но это было то, что мы должны были сделать.)

не допускать этого не только наивно с точки зрения безопасности, но и нестандартно: клиент должен быть разрешено отправлять HTTP любыми способами, которые они пожелают, и вы должны ответить правильно. Это включает в себя проверку.

проверка на стороне сервера также важна для совместимость - не все пользователи, даже если они используют браузер, будут иметь JavaScript включен.

Добавление-Декабрь 2016

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

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

Я просто повторю это, потому что это очень важно:

всегда проверяйте на сервере

и добавить JavaScript для пользовательского реагирования.

преимущество делать проверки на стороне сервера проверки на стороне клиента заключается в том, что проверка на стороне клиента может быть обойдена/манипулировать:

  • конечный пользователь мог отключить javascript
  • данные могут быть отправлены непосредственно на ваш сервер кем-то, кто даже не использует ваш сайт, с помощью специального приложения, предназначенного для этого
  • ошибка Javascript на Вашей странице (вызванная любым количеством вещей) может привести к некоторым, но не всем, вашим проверкам работает

короче говоря-всегда, всегда проверяйте на стороне сервера, а затем рассматривайте проверку на стороне клиента как добавленную "дополнительную" для улучшения работы конечного пользователя.

вы всегда проверка на сервере.

также наличие проверки на клиенте приятно для пользователей, но совершенно небезопасно.

вы можете выполнить проверку на стороне сервера и отправить обратно объект JSON с результатами проверки для каждого поля, сохраняя клиентский Javascript до минимума (просто отображая результаты) и все еще имея удобный для пользователя опыт без необходимости повторять себя как на клиенте, так и на сервере.

Ну, я все еще нахожу место, чтобы ответить.

в дополнение к ответам от Роба и Натана, я бы добавил, что наличие валидаций на стороне клиента имеет значение. При применении проверок на веб-формах необходимо следовать следующим рекомендациям:

На Стороне Клиента

  1. необходимо использовать проверки на стороне клиента для фильтрации подлинных запросов, поступающих от подлинных пользователей на вашем веб-сайте.
  2. проверка на стороне клиента должна использоваться для уменьшения ошибок это может произойти во время обработки на стороне сервера.
  3. проверка на стороне клиента должна использоваться для минимизации обходов на стороне сервера, чтобы сэкономить пропускную способность и запросы на пользователя.

На Стороне Сервера

  1. вы не должны предполагать, что проверка успешно выполнена на стороне клиента на 100% идеально. Неважно, даже если он обслуживает менее 50 пользователей. Вы никогда не знаете, какой из ваших пользователей / emplyee превратится в "зло" и сделает какую-то вредную деятельность, зная у вас нет надлежащих проверок на месте.
  2. даже если его идеально подходит с точки зрения проверки адреса электронной почты, номера телефонов или проверки некоторых допустимых входов он может содержать очень вредные данные. Который должен быть отфильтрован на стороне сервера независимо от того, если его правильно или неправильно.
  3. если проверка на стороне клиента обходится, ваши проверки на стороне сервера приходят, чтобы спасти вас от любого потенциального повреждения вашей обработки на стороне сервера. В последнее время, мы уже слышали много историй SQL инъекции и другие виды методов, которые могут быть применены для того, чтобы получить некоторые злые преимущества.

оба типа проверок играют важную роль в их соответствующей области, но наиболее сильным является серверная сторона. Если вы получаете 10k пользователей в один момент времени, то вы, безусловно, в конечном итоге фильтрации количество запросов, поступающих на ваш веб-сервер. Если вы обнаружите, что была одна ошибка, например, неверный адрес электронной почты, они снова отправляют форму и спрашивают ваш пользователь, чтобы исправить это, что, безусловно, съест ваши ресурсы сервера и пропускную способность. Поэтому лучше применить проверку javascript. Если javascript отключен, то ваша проверка на стороне сервера придет на помощь, и я уверен, что только несколько пользователей могут случайно отключить его, так как 99,99% веб-сайтов используют javascript и его уже включен по умолчанию во всех современных браузерах.

клиентская сторона должна использовать базовую проверку через типы ввода HTML5 и шаблон атрибутами и поскольку они используются только для прогрессивных улучшений для лучшего пользовательского опыта (даже если они не поддерживаются на

JavaScript может быть изменен во время выполнения.

Я предлагаю шаблон создания структуры проверки на сервере и обмена этим с клиентом.

вам понадобится отдельная логика проверки на обоих концах, например:

"required" атрибуты inputs на стороне клиента

field.length > 0 на стороне сервера.

но использование одной и той же спецификации проверки устранит некоторую избыточность (и ошибки) зеркальной проверки на обоих концах.

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

Обновление 23 Июля 2018: следующая ссылка больше не доступна:

вы можете найти здесь актуальную информацию http://www.webexpertlabs.com/server-side-form-validation-using-regular-expression/

я наткнулся на интересную ссылку, которая делает различие между грубые, систематические, случайные ошибки.

Client-Side validation идеально подходит для предотвращения грубых и случайных ошибок. Обычно максимальная длина для текстуры и ввода. Не имитируйте правило проверки на стороне сервера; предоставьте свое собственное грубое правило проверки эмпирического правила (например. 200 символов на стороне клиента; n на стороне сервера, продиктованной сильным бизнес-правилом).

Server-side validation идеально подходит для предотвращение систематических ошибок; это обеспечит соблюдение бизнес-правил.

в проекте, в котором я участвую, проверка выполняется на сервере через ajax-запросы. На клиенте я показываю сообщения об ошибках соответственно.

дальнейшее чтение: грубые, систематические, случайные ошибки:

https://answers.yahoo.com/question/index?qid=20080918203131AAEt6GO

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

Comments

    Ничего не найдено.