使用Perl编写CGI时需要注意的几个问题3、文件名和路径 在UNIX下,我们可以使用相对路径对文件进行调用,但是在WINDOWS下一般是需要绝对路径。在编写CGI的时候请注意这一点。有时候,我们有可能忘了一点:UNIX是区分大小的,而WINDOWS则是不分大小写的,在WINDOWS下编好的CGI放到UNIX下运行不了,则有可能是这个问题。 4、权限问题 众所周所,UNIX和NT的文件权限管理有所不同,在UNIX下分三种权限:是否可读、是否可写和是否可执行,而在NT下却有:读取、写入、执行、删除、更改权限、取得所有权等。在UNIX中,我们对具有CGI执行权限的主页空间一般是这样设置的:CGI目录设为711,其它需要给浏览者发布信息的目录设置为666。而在NT下,则你需要根据实际情况作出给予Everyone用户相应的权限,有时候是可读可写入即可,但是有的进候还要增加“可删除”才行。比如你设置一个论坛,这个论坛的管理中有删除帖子的功能,这个时候存放帖子的目录就行给予用户删除的权限。 二、文件名 文件名是提交给CGI脚本的一种数据,但如果不小心的话,却能导致许多麻烦。 想要打开一个用户提供的名字的文件时,都必须严格检查这个文件名以免招至系统重要文件泄露。用户输入一个文件名,有可能就试图打开输入危险字符串! 例如,用户输入的文件名中包含路径字符,如目录斜杠和双点!尽管你期望的是输入公用的文件名,例如report.txt,但结果却可能是/report.txt或../../report.txt,系统中所有文件就有可能泄露出去,后果是可想而知的.。 $user_input=~s/<>//g; 2、复杂一点的方法就是将这两个字符转换成它们的HTML换码(特殊的代码),用于表示每个字符而不使用该字符本身. 下面的代码通过全部用& lt;替换了小于符号,用& gt;替换了大于符号,从而完成了转换: $user_input=~s/</</g; $user_input=~s/>/>/g;
三、发送MAIL的安全问题 当你在CGI中使用了一个邮件功能的时候,你是否注意到服务器的安全?黑客可以在利用它获取任意文件。 在编写时要注意以下几点: 1、判断输入的数据是否为合法的E-MAIL地址,例如: if ($names{'mail'}=~tr/;"',*|&!$#()<>[]{}://){ #如果数据带有命令字符则 print "Content-type:text/htmlnn"; print "抱歉你的E-MAIL地址不合法,请您从新输入"; exit; } 2、在UNIX下使用:“ open(MAIL,"|sendmail -t"); ” 其中-t表示只处理邮件而不对命令进行任何处理! 4、输出到浏览器 这是新手要注意的一个问题。 |