2011-04-24 125 views
0

我有一个用于将数据插入数据库的类,并且传递给此类方法的信息必须经过转义和验证。验证和转义数据的最佳做法是什么?是否应该在方法的实现中完成,还是应该在使用该类的脚本文件中完成,以便在移动到类之前信息有效且安全?过去,我一直都在做这件事,并一直在想,大多数人是这么做的。 (我在PHP中编码,如果它很重要,但它似乎更像是一个一般的编程习惯问题给我。)面向对象内部或外部方法的安全/验证?

谢谢!

回答

0

这一定程度上取决于你有关于你的数据处理架构的类型,但...

在一般情况下,该数据插入到数据库类(姑且称之为持久化类)应执行SQL逃逸。如果这些值必须是特定类型的(例如VARCHAR,INT),那么它也可以验证这些值,或者将它留给数据库来为错误的数据类型抛出错误。

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

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

在一个更简单的情况下,只有一个脚本的层数较少,数据的验证应该在脚本将数据交给持久化类之前完成。 (在PoEAA中,如果你好奇的话,这可能是最接近交易脚本模式的)

+0

所以基本上任何类型的安全数据库所需的转义应该在方法的实现中完成,但是应该完成任何其他验证在传递给方法之前。这基本上是我通常做的。 – Key 2011-04-24 00:39:10

+0

你在正确的轨道上:) – 2011-04-24 00:40:41

0

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

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

身份验证和授权的安全问题是交叉担忧。如果您的语言支持它们,这些属于方面。