2009-06-18 2 views
1

(Примечание: thesetwo вопросы похожи, но более специфичные для ASP.Net)Какое место для проверки входных данных?

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

Где я, вообще говоря, ставил логику проверки, т.е. е. обеспечение правильного формата адресов электронной почты, номеров и т. д.?

  1. Как можно скорее. Богатые клиентские среды, такие как Flex, обеспечивают встроенную логику валидатора, которая позволяет проверять правильность при отправке формы, даже до того, как она достигнет вашей модели данных. Это приятно и отзывчиво, но если вы развиваете что-то расширяемое, и вы хотите, чтобы валидация защищала от ошибок программирования более поздних авторов, это не улавливает его.
  2. В модели данных на стороне клиента. Поскольку это «официальное» представление ваших данных, и у вас уже есть типы данных и геттеры/сеттеры, эта проверка фиксирует ошибки пользователя и ошибки программирования у людей, расширяющих вашу систему.
  3. После получения данных на сервере. Это добавляет защиту от неработающих или вредоносных клиентов, которые могут присоединиться к системе позже. Кроме того, в сценарии с несколькими клиентами это дает вам один авторитетный источник проверки.
  4. Перед тем, как хранить данные в бэкэнд. Это включает защиту от всех ошибок, совершаемых в любом месте цепи (за исключением самой логики хранения), но может потребовать повторения ошибки на всем пути назад.

Я вроде как склоняюсь к использованию как 2, так и 4, поскольку я создаю приложение, которое имеет различные точки потенциального расширения третьими лицами. Использование 2 в дополнение к 4 может показаться излишним, но я думаю, что это делает клиентское приложение более удобным для пользователя, поскольку для проверки отсутствия данных на сервере не требуется обратного перехода к серверу. Каков ваш подход?

ответ

1

Не вдаваясь слишком конкретным, я думаю, что должен валидация по следующим причинам:

  1. Пусть пользователь знает, что вход неправильно в некотором роде.
  2. Защитите систему от атак.

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

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

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

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

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

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

+0

довольно прекрасно :) Он удовлетворяет всем частям веб-разработчиков моего мозга: D – jrharshath

+0

Спасибо за комментарий :) – coobird

1

Там только правило, которое использует по крайней мере своего рода сервера проверки всегда (номер 3/4 в списке).

Проверка клиента (Номер 2/1) делает работу пользователя более быстрой и уменьшает нагрузку (поскольку вы не отправляете сообщения на сервер, который не проходит проверку клиента).

Важно отметить, что если вы проводите проверку клиента только с большим риском (просто представьте, если ваша проверка клиента зависит от javascript, и пользователи отключили javascript в своем браузере).

+3

НЕТ «соответствующих мер», которые вы можете предпринять без проверки сервера в веб-приложении. У вас нет возможности помешать кому-либо передавать произвольно обработанные HTTP-запросы. –

+0

Я согласен - я забрал этот бит. – JohnIdol

0

Там shoudl определенно должен быть проверен на сервере. Я думаю, что проверка должна выполняться как можно раньше на сервере, поэтому вероятность появления вредоносных (или неправильных) данных в системе меньше.

Валидация ввода на стороне клиента полезна, поскольку это делает интерфейс более удачным, но нет гарантии, что данные, поступающие на сервер, прошли проверку на стороне клиента, поэтому ДОЛЖНО быть проверкой на сервере.

0

Из-за безопасности удобство: серверная сторона и как можно раньше Но важно также иметь некоторую глобальную проверку модели/бизнес-логики, поэтому, когда у вас есть, например, несколько форм с общими данными (например, имя продукт) правило проверки должно оставаться согласованным, если в нем не указано иное.

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