方法内部或外部的OOP安全性/验证


OOP Security/Validation inside or outside of methods?

我有一个用于向数据库插入数据的类,传递给该类方法的信息必须进行转义和验证。验证和转义数据的最佳实践是什么?应该在方法的实现中完成,还是应该在使用类的脚本文件中完成,以便在转移到类之前信息是有效和安全的?我过去用过两种方法,一直想知道大多数人用的是哪种方法。(如果需要的话,我会用PHP编码,但对我来说,这似乎更像是一个通用的编程实践问题。)

谢谢!

这在某种程度上取决于数据处理的体系结构类型,但是…

通常,将数据插入数据库的类(我们称之为持久化类)应该执行SQL转义。如果值必须是特定类型(例如。VARCHAR, INT),它也可以验证这些数据类型,或者让数据库为不正确的数据类型抛出错误。

对于更具体的验证,它可能是一个好主意,包括它在您的领域模型或其他代码处理的直接输入(例如;GET和POST)。

如果您使用领域模型对象,它们应该包含一个方法,可以用来确保它们是有效的,或者它们不应该接受根据模型需求无效的数据。然后,持久性类可以简单地处理域对象,或者通过域对象的存储库。

在一个更简单的场景中,您只有一个具有较少独立层的脚本,数据的验证可能应该在脚本将数据交给持久性类之前完成。(在PoEAA中,如果您好奇的话,这可能是最接近事务脚本模式的)

我认为在将数据传递给持久性方法之前应该对其进行验证。

转义应该是持久性方法实现的一部分,使用预处理语句。

身份验证和授权的安全问题是横切关注点。