Способы проверки достоверности данных
Что такое валидация данных
Валидация – это процесс проверки данных на соответствие различным критериям. При разработке любого приложения в большинстве случаев разработчику приходится иметь дело с обработкой данных, которые ввел пользователь в соответствующие поля на форме. По разным причинам пользователь может вводить некорректные данные. Например, в поле "Возраст" он по ошибке может указать отрицательное или вовсе нечисловое значение. На практике встречается множество ситуаций, где определенные поля в пользовательском интерфейсе могут содержать только те данные, которые строго соответствуют определенным шаблонам. Если не учитывать подобные ситуации, то в процессе работы приложения могут возникать сбои, связанные с некорректным вводом пользователя. Ошибки могут быть допущены случайно или намеренно. В последнем случае пользователь может вводить некорректные данные с целью вывести приложение из строя и таким образом произвести атаку на приложение. Поэтому каждое приложение, которое работает с данными, которые вводит пользователь (а таких приложений большинство) должно производить предварительную проверку корректности введенных данных. Именно по этой причине каждый разработчик должен быть знаком с механизмом валидации данных, которые указал пользователь.
Исторически, механизмы валидации данных разрабатывались самими разработчиками прикладных приложений. Это означает, что при каждой обработке запроса логике обработки запроса предшествовало большое количество условных операторов, определяющих условия корректности данных. Примером такого подхода может являться следующий фрагмент кода.
Приведенный фрагмент кода является лишь небольшой демонстрацией того, насколько громоздким может быть код валидации данных. Тем не менее, приведенный выше пример является упрощенной демонстрацией того, как может выглядеть подобный код. Как видно при относительно малом количестве проверяемых параметров, создается большое количество кода. В реальных условиях эти проверки обычно сложнее, а параметров больше.
Поскольку подобный подход вносит множество программного кода в процесс обработки запроса и ухудшает читаемость программы, платформа ASP.NET содержит ряд механизмов для выполнения валидации в виде отдельных программных компонентов.
Существует два вида валидации данных, введенных пользователем.
- клиентская валидация;
- серверная валидация.
Клиентская валидация производится в бразуере на стороне клиента. Как правило, логика валидации на стороне клиента реализуется посредством сценариев JavaScript, которые запускаются внутри браузера. Клиентская валидация обычно содержит несложные алгоритмы проверки. Это происходит в силу того, что клиентский код физически не может обратиться к серверным ресурсам (например, к базе данных). Поэтому на стороне клиента проверяются самые тривиальные сценарии (такие как проверка длины строки, проверка на вхождение в диапазон и т.д.).
Клиентская валидация может отсутствовать в приложении. Однако, если сценарии валидации присутствуют на стороне клиента, это может избавить от необходимости лишних обращений к серверу в случае невыполнения простых условий проверки.
Серверная валидация работает в рамках программного кода, размещенного на стороне сервера. Здесь проверяются всевозможные случаи, в том числе те, которые уже были проверены на стороне клиента. Кроме тривиальных проверок, на стороне сервера могут работать более сложные алгоритмы. Необходимость дублирования проверки сценариев, которые уже были проверены на стороне клиента, обусловлена тем, что клиентские проверки могут не сработать, если в браузере у клиента отключено исполнение сценариев JavaScript. Другими словами наличие клиентской валидации не может гарантировать успешную проверку определенных там ограничений.
Общий алгоритм валидации данных, введенных пользователем можно представить следующим образом.
Таким образом, серверная валидация – это необходимый процесс, который должен выполнятся всякий раз, когда обрабатывается пользовательский ввод, а клиентская валидация – это опциональный компонент, который позволяет избавить пользователя от необходимости лишних обращений к серверу и повысить удобство работы с приложением.
Краткие итоги
Большинство приложений так или иначе обрабатывает данные, которые вводит пользователь на странице. Пользователь может случайно или намеренно вводить некорректные данные. Поэтому требуется проверка пользовательского ввода при обработке запроса. Процесс проверки данных, введенных пользователем называется валидацией. Существует два типа валидации – серверная и клиентская. Серверная валидация производит всевозможные проверки и является основным механизмом валидации. Клиентская валидация позволяет обрабатывать алгоритмы валидации более интерактивно (на стороне клиента) и таким образом делает использование веб-приложения более удобным.