Зачем нам нужна проверка на стороне сервера и на стороне клиента для веб-приложений? - PullRequest
7 голосов
/ 02 ноября 2010

Есть ли какая-либо причина для проверки веб-приложения на стороне клиента и на стороне сервера?

Ответы [ 8 ]

10 голосов
/ 02 ноября 2010

Поскольку проверка на стороне клиента может быть подорвана.

Например - в Интернете, если вы используете для проверки javascript, очень просто отключить javascript или изменить его работу с помощью таких инструментов, как FireBug.

Событие, связанное с другими методами клиент / сервер, может привести к подрыву канала передачи данных и изменению «проверенных» данных на пути к серверу ( атака Man In The Middle )

В целом, принцип «никогда не доверяй клиенту» - это причина, по которой тебе всегда нужно проверять на сервере.

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

3 голосов
/ 02 ноября 2010

Пользователь может изменить проверочный JavaScript локально (сохранить страницу и делать с ней что угодно) или отключить JavaScript в браузере. Таким образом, в этом случае проверка на стороне клиента бесполезна. Следовательно, вы должны проверить на сервере тоже

2 голосов
/ 02 ноября 2010

Цель проверки на стороне клиента в реальном времени (то есть, когда пользователь переходит от поля к полю, а не после того, как пользователь нажимает кнопку ОТПРАВИТЬ), состоит в том, чтобы предоставить пользователю обратную связь как можно скорее. Например, если для номера социального страхования требуется 9 цифр, а пользователь набрал 8, вы не хотите ждать, пока пользователь заполнит оставшуюся часть формы, и нажмете кнопку SUBMIT, чтобы указать на ошибку, даже если проверка выполнена. происходит на стороне клиента. Ожидать, пока после SUBMIT не произойдет проверка на стороне клиента, почти бессмысленно - все, что он делает, - это экономит ваш сервер и пропускную способность. Указание на ошибки по мере их совершения обычно приводит к более высокой скорости заполнения формы, поскольку в целом это проще для пользователя - список ошибок не будет: «Пожалуйста, исправьте все ошибки ниже ". Но вам все равно нужно пройти проверку на стороне сервера, чтобы обеспечить целостность данных в любом случае. Вышибала ночного клуба стоит перед дверью клуба, а не на парковке через улицу.

2 голосов
/ 02 ноября 2010

Проверка на стороне клиента используется для следующих
1) соответствие данных длине и формату.
2) мгновенная индикация или обратная связь с пользователем

Проверка на стороне сервера
1) более продвинутые проверки против бизнес-логики
2) проверить наличие каких-либо изменений в критерии. Например, вы заказываете книгу в магазине Amazon, и после того, как вы оформите заказ, вы получаете указание на то, что книги нет в наличии, потому что кто-то другой купил бы ее за несколько мгновений до
3) Проверьте, если предполагаемый пользователь опубликовал данные. Такие вещи на стороне клиента, как файлы cookie и javascript, можно манипулировать, поэтому серверу необходимо аутентифицировать и проверять данные, проходящие через него.

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

2 голосов
/ 02 ноября 2010

Проверка на стороне клиента является плюсом, но не обязательна. Вы ДОЛЖНЫ использовать проверку на стороне сервера (ssv), потому что, когда вы принимаете пользовательскую информацию, вы всегда должны рассматривать ее как «враждебную». Если эти данные также поступают в базу данных, ssv - ваша последняя линия защиты, потому что вы не хотите, чтобы в вашей базе данных были ненужные или недействительные данные.

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

2 голосов
/ 02 ноября 2010

Клиентская сторона (теоретически) удалит большинство проблем проверки до достижения сервера (хотя это не всегда так, когда JavaScript отключен / отредактирован и т. Д.).Это удалит любую «нагрузку» / ненужную обработку с сервера, поместив бремя на клиентское устройство для выполнения проверки.

На стороне сервера будут обнаружены любые проблемы проверки, которые по какой-то причине не были обнаружены клиентомпроверка стороны.

2 голосов
/ 02 ноября 2010

Проверка на стороне клиента дает пользователю немедленную обратную связь, не дожидаясь загрузки страницы.Однако если клиент отключил клиентские сценарии (например, JavaScript отключен), проверка не будет выполняться, поэтому вам также необходим сервер для проверки значений.

0 голосов
/ 18 февраля 2013

Если у вас есть приложение с несколькими таблицами в базе данных, ваша проверка на стороне сервера может быть лишь набором ограничений (часть дизайна вашей таблицы данных).Мы можем подумать, что у нас нет какой-либо проверки на стороне сервера, потому что это не уровень промежуточного сервера, а ограничения уровня БД.

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

Таким образом, мы можем сказать, что в некоторых / большинстве случаев мы можем использовать только проверку на стороне клиента.Проверка на стороне сервера - особый случай, например: проверка того, что что-то уже было куплено, когда клиент отправляет форму покупки.

Это неплохая идея - не повторяться с валидацией с обеих сторон.

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

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

...