数据完整性是工程应用程序成功的关键。接收、处理、存储数据,其实就是应用程序的全部内容。无论你怎样变换数据,或采用什么新颖方式来展现它,允许它被查询,这一切的基础都在于你使用的数据是有价值的,否则这些都一文不值。
Web应用程序中的应用数据历来是最受保护的元素,这些数据被写到多个数据中的多台机器中。多重磁盘镜像或奇偶RAID配置即用来纺织数据丢失的。备份磁带和脱机备份周期用来丢失资料的恢复。很多防线可用于保护你的数据存储系统,但假如你的应用程序允许垃圾进入系统,那么这一切都是徒劳的。
所谓数据完整性策略(常用缩写DIP)其实就是一套规则和规章,他们关心的是应用程序如何做到存储和输出预期数据。它应该涵盖一切内容,从检查数据是否符合所用字符集和编码,到过滤无用的字符,再到环境的完整性等等,比如确保存储标记是符合规范。
可行的数据完整性策略基于一个基本的原则,即应用程序的内部数据是有用的。换句话说,引入的数据在便捷处被过滤,以过来后的结果存储。在输出数据时不需要再做任何处理。这种做法是明智的,它有两个重要原因:
首先,在过滤方面所做的努力不是毫无价值的,尤其是在编码转化和语法检查方面。Web应用程序通常很多次输出一块存储数据,次数远多于数据注入次数(只发生一次)。在输入时转换,那么只需要进行一次,而不是在每个鼠兔上都进行。
其次,通常一段应用程序,其输出和输入相比,输入的内容要少得多,如果应用程序让您给一个条目加标题,那么加标题只在一个地方发生,而展示这个标题却可以发生在许多环境中。通过数据边界进行过滤,可以激昂地输出是的编码复杂程度,这将降低整体的代码长度。输出可以做到非常简单,只是直接从数据库中读取并编码内容,而且知道读取的那些内容总是有效的,但并非所有都一定要预先执行。比如某人为一个对象选择一个标题,当标题显示在Web页面或者XML文档中时,他需要转义4个XML元字符(<、>、”和&)。但如果它现在在电子邮件或者JavaScript中,则不需要转义(或者需要不同种类的转义)。