其实做这个很容易。您的 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 <
那您的 CGI script 就替您把 /etc/passwd 给拱手送上了。这对一个「未加工」的 Linux、SunOS 4.1,还有其他任何没安装 shadow-password 的 UNIX 系统来说, 实在不太好玩。如果 server 错误地跑了 root,那麽就算装了 shadow-password 也没有用,因为远方的 cracker 甚至可以让这个 CGI 的 email script 给他送 /etc/shadow (视系统而定,不一定在 /etc 底下或叫这个名字)。
Per CGI 程式设计疑难杂症
2019-11-24来源:
其实做这个很容易。您的 CGI script 必须能做到这两件事: 将 form 中的资料整理出来。别忘了,所有的 form 资料都会被 URL-编码起来 (先不考虑 Netscape 2.