Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->CGI ->正文

使用Perl编写CGI时需要注意的几个问题

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-28 点击: [收藏] [投稿]

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,系统中所有文件就有可能泄露出去,后果是可想而知的.。
如果用户输入一个已有文件名或对系统的运作有很重要的文件件名!比如输入的文件名是/etc/passwd,那用户就可以对该文件任意修改。可能第二天登录网站时进行更新的时候,你就发现密码被别人修改了,那时你只有写信给系统管理员请求帮助了。 所以在编写CGI脚本时要保证所有字符都是合法的。下面这段代码能把不合法的字符过滤掉。
if(($file_name =~ /[^a-zA-Z_.]/) || ($file_name =~ /^./)) {
print "文件包含有不合法字符,请重新输入";
exit;
}
最好将上面代码做为一个子程序,这样就可以重复地调用它这样也方便于修改. 对于不允许输入HTML下面有两个方案.
1、有种简单的方法就是不允许小于号(<)和大于(>)因为所有HTML语法必须包 含在这两个字符间,如果碰到它们就返回一个错误是一种防止HTML被提交的简单的方法. 下面一行Perl代码快速地清除了这两个字符:


$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、输出到浏览器

这是新手要注意的一个问题。
输入到浏览器的命令是:print "Content-type:text/htmlnn"; ,表示以文本方式在浏览器上显示后面的输出,切记这行命令后面的nn是不能少的。只有这样,你才能在浏览器上看到CGI的运行结果。另外, print "Content-type: image/x-xbitmapnn";
表示以图像方式输出到浏览器,这个方式在编写图形计数器时经常会用到。

 



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Perl的运算符号字符概述   下一篇:perl与Mysql连接

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
·CGI教学:CGI常用环境变量
·关于CGI读写COOKIE的编程
·CGI的安全(二)
·CGI的安全(一)
·获取随机的密码
·在CGI中实现session的想法和实现
·CGI绝对路径和相对路径的简便设置方法
·使用脚本下载网页
·利用Perl开发Internet/Intranet应用之二(5)
·利用Perl开发Internet/Intranet应用之二(4)
推荐文章
精彩文章
Power by linux-cn.com 粤ICP备05006655号