欢迎来到天天文库
浏览记录
ID:9490244
大小:72.50 KB
页数:14页
时间:2018-05-01
《cgi 安全问题详解与说明(二)--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、CGI安全问题详解与说明(二)>>2.6一切看起来都正常,不过…现在已经知道了用户能给CGI脚本提供非预期的数据的几种方式以及如何对付它们了,余下的更大问题是如何验证用户提交的合法数据。大部分情况下,正确但聪明地编写的表单提交会导致比越界数据更多的问题。忽略无意义的输入很容易,但确定合法的、正确格式的输入会不会导致问题就要困难得多。因为CGI脚本非常灵活,几乎可做计算机能做的任何事情,所以安全方面的一个很小失误往往能被无限制地加以利用——而这正是最危险的地方。2.7处理文件名文件名是提交给CGI脚本的简单
2、数据,但如果不小心的话,却能导致许多麻烦。如果用户输入的名字中包含路径因素,如目录斜杠和双点,尽管期望的是输入一个简单的文件名--例如file.txt--但结果却可能是/file.txt或../../../file.txt。根据L><TITLE>Greetings!<TITLE><BODY>n");print("Hello,$user_Name!It'sgoodtoseeyou!n");print("</BODY><HTML>n");想像一下,如果用户不是仅仅输入一个名字,而是输入了<HR><H1><PA
3、LIGN="CENTER">JohnSmith</P><H1><HR>或想像一下当脚本希望得到用户名时,黑客输入了<IMGSRC="/secret/cutekid.gif">,结果是公开了本该保密的信息。允许输入HTML可能很危险。比输入简单的HTML修改页面或访问画面更危险的是恶意的黑客可能输入一条服务器端的include指令。如果d="rm-rf/"-->而不是他的名字。这样上述程序清单中的代码会删掉硬盘上几乎所有内容。警告由于经常被恶意地使用,服务器端的include经常被禁止使用以保护站点免受侵害
4、。现在假定这些都没问题。即使关闭了服务器端的include并且不介意用户能看到自己硬盘上的任何图片或者改变页面显示的外观,也仍然有问题--不仅是针对编程者的,而且针对其他用户。CGI脚本的一个通常用途是留名册(guestbook):访问站点的顾客可能签个名,让别人知道他们已经在那儿了。一般情况下用户简单地输入他的名字,该名字会在访问者清单中出现。但是,如果将Thelastsignee!<FORM><SELECT>作为用户名输入怎么办?<SELECT>标记将导致>和一个<SELECT>标记。因为第三个签名者
5、在他的名字中使用了HTML标记,他后面的任何名字都不会显示出来。对于用户输入HTML而不是普通的文本的情况有两种解决办法:1)快速但比较粗糙的办12345下一页>>>>这篇文章来自..,。法是不允许小于号(<)和大于号(>),因为所有HTML标记必须包含在这两个字符中,所以清除它们(或者如果碰到它们就返回一个错误)是一种防止HTML被提交并返回的简单的办法。下面一行Perl代码简单地清除了这两个字符:$user_Input=~s/<>//g;2)更精细一点的办法是将这两个字符转换成它们的HTML换码--—
6、种特殊的代码,用于表示每个字符而不使用该字符本身。下面的代码通过全部用<替换了小于符号,用>替换了大于符号,从而完成了转换:$user_Input=~s/</1t;/g;$user_Input=~s/>/>/g;2.10处理外部进程最后,CGI脚本如何与带有外部过程的用户输入打交道是应该警惕的另一区域。因为执行一个位于自己的CGI脚本之外的程序意味着无法控制它做什么,必须尽最大努力在执行开始前验证发送给它的输入。例如,shell脚本经常错误地将一个命令行程序和表单输入合在一起执行。如果用户输入符合要求,一
7、切都挺正常,但是有可能会加入其它命令并非法执行。下面即是一个产生了这种错误的脚本的例子:FINGER_OUTPUT='finger$USER_INPUT'echo$FINGER_OUTPUT如果用户很礼貌地给finger输入了某人的e-mail地址,一切都会正常工作,但是如果他输入了一个e-mail地址,后面再跟一个分号和另一条命令,那么该命令也会被执行,如果用户输入了aster.server.;rm-rf/,那麻烦可就大了。即使没有什么隐藏的命令被加入用户数据,无意的输入错误也可能带来麻烦。例如,下面的
8、代码行会产生一个意料之外的结果——列出目录中的所有文件——如果用户输入是一个星号的话。echo"Yourinput:"$USER_INPUT当通过shell发送用户数据时,就象前面的代码片段所做的那样,最好检查一下shell的meta-character(元字符)——这些可能会导致意外的行为。这些字符包括分号(允许一行中有多条命令),星号和问号(完成文件匹配),感叹号(在csh下指运行的作业),单引号(执行一条包含其中的命令)
此文档下载收益归作者所有