常见的输入源包括:
1)命令行参数:有些软件程序启动时能接收来自命令行的参数输人,对这些参数需要进行严格的检查,包括参数的数量、格式和长度等。
2)环境变量:软件程序中可能读取、使用环境变量,由于常会误认为环境变量是操作系统的变量j软件开发人员容易认为其可信,从而忽视对其的验证。环境变量作为输入有可能存在的危险包括长度过长、内容篡改、格式不符等。
3)文件及文件名:考虑到外部文件更容易被攻击者篡改,因此软件程序中读入外部文件时,需要对文件进行验证,检查的内容同样包括长度、格式和内容等各个方面。此外,对文件名也需要加强输入检查,不同的操作系统可能采用不同的文件命名要求,甚至对文件名的路径保护、链接使用等措施也不一样,软件程序如果不对输入的文件名进行检查,可能被攻击者利用后来篡改或删除某些系统文件。
4)网络数据:网络数据是高度不可信的。只要是通过网络传递过来的数据,不管是数据内容本身,还是组成网络包的数据头(如表示来源IP地址区域),都是极容易被攻击者篡改和伪造。因此,对网络数据更需要进行严格的验证检查。
5)其他来源:软件程序还存在很多其他的输入,如信号、内存映射、系统管道等,安全的程序不应当忘记对这些输入来的数据进行验证检查。
对输入的验证检查,具体到不同的软件程序中有不同的要求。一般地,对字符串、数字、文件名、邮件地址、URL等不同的数据串有不同的通用性规则,如数字需要主要检查整数溢出、合法范围等;对邮件地址主要检查格式、特殊字符等;对文件名主要检查长度、特殊字符等。