我已经阅读了关于数据验证应该发生在何处的矛盾理念,这让我更加困惑。有人说它应该只在数据库中。其他人说验证规则应该反映在其他层,如bll或ui。
数据验证应该在哪里进行?规则应该分为多个层次吗?什么是一些实际的最佳实践(与理论相反,在云类型中填写)关于在数据库顶部运行的应用程序中验证数据的时间和位置。
答案 0 :(得分:9)
我的2美分:
数据验证应在两个位置进行:
对数据采取行动的点,例如验证SQL查询的输入参数。
提交数据时的常规验证,例如在Web应用程序中,应在客户端进行一些验证。优点是您可以快速通知用户输入问题,即错误形成的电话号码,字符串太长等等。但是,对于Web应用程序,恶意用户不应该依赖于权威验证检查。可以绕过客户端验证。
在我看来,数据库不应该执行一般验证,数据应该在进入数据库之前进行验证/转义/清理。也就是说,您的数据库模式可以通过列数据类型,约束等为您提供一定程度的抽象验证。也就是说,任何可能触发这些问题的数据都应该在传递到数据库之前进行“清理”。
这说,有许多错误的方法,但没有正确的方法。验证取决于应用程序的体系结构,其中的数据性质以及如何使用这些数据。
答案 1 :(得分:3)
应该这样做: