一个程序应该永远不要假设用户环境是健全的。这包括(但是决不限于此): 用户输入,信号,环境变量,资源,IPC,mmap(内存映射),工作目录的文件系统, 文件描述符,打开文件的数量,等等
你永远不要假设你可以捕捉到所有的用户可能产生的非法输入样式。 换言之,你的程序应该过滤只准许一些你认为安全的特别的输入子集。 不正确的确认数据会导致各种错误,特别是在互联网上的CGI脚本。 对于文件名你应该额外小心比如路径("../", "/"),符号连接和shell的退出符。
Perl有一个非常棒的特性叫做“Taint”模式能避免脚本从外部程序在不 安全的途径得到使用的数据。这个方式会检查命令行参数,环境变量,位置 信息确定系统调用 (readdir()
, readlink()
, getpwxxx()
) 的结果和所有文件的输入。