我有一个用于将数据插入数据库的类,并且必须对传递给此类方法的信息进行转义和验证。验证和转发数据的最佳做法是什么?它应该在方法的实现中完成,还是应该在使用该类的脚本文件中完成,以便在进入类之前信息是有效和安全的?我过去已经做过两种方式,并且总是想知道大多数人都这样做的方式。 (如果重要的话,我用PHP编写代码,但它似乎更像是一般的编程实践问题。)
谢谢!
答案 0 :(得分:0)
我认为在将数据传递给持久性方法之前应该验证数据。
使用预准备语句,转义应该是持久性方法实现的一部分。
身份验证和授权的安全问题是跨领域的问题。如果您的语言支持,这些属于方面。
答案 1 :(得分:0)
这在某种程度上取决于您在数据处理方面的架构类型,但是......
通常,将数据插入数据库的类(让我们称之为持久化类)应该执行SQL转义。如果值必须是特定类型(例如VARCHAR,INT),它也可以验证这些值,或者将其留给数据库以便为不正确的数据类型抛出错误。
对于更具体的验证,将它包含在您的域模型或处理即时输入的其他代码(例如GET和POST)中可能是个好主意。
如果使用域模型对象,则它们应包含可用于确保它们有效的方法,或者它们不应接受根据模型要求无效的数据。然后,持久化类可以简单地处理域对象,或者通过域对象的存储库。
在一个更简单的场景中,您只有一个具有较少单独层的脚本,数据验证应该在脚本将数据交给持久性类之前完成。 (在PoEAA中,这可能是最接近事务脚本模式的,如果你很好奇的话)