Где должна проводиться проверка данных?

Я читал противоречивые философии о том, где должна выполняться проверка данных, и это просто путает меня больше. Некоторые говорят, что это должно быть только в базе данных. Другие говорят, что правила проверки должны быть отражены в других слоях, таких как bll или ui.

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

Ответы

Ответ 1

Мои 2 цента:

Проверка данных должна выполняться в двух местах:

  • Точка, в которой действуют данные, например, проверка входных параметров в SQL-запрос.

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

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

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

Ответ 2

это должно быть сделано:

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

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