欢迎来到天天文库
浏览记录
ID:9487672
大小:59.50 KB
页数:7页
时间:2018-05-01
《cgi 安全问题详解与说明(一)--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、CGI安全问题详解与说明(一)>>1.脚本和程序在开始决定采用何种语言编写CGI脚本时应考虑几个因素,其中之一应是安全性。Shell脚本,Perl程序和C可执行程序是CGI脚本最常采用的形式,从安全性角度来说每种都备有优缺。尽管没有哪一种是最好的--基于其他方面的考虑,如速度和可重用性--每种都有实用的领域。Shell脚本一般用于小的、快速的甚至可以用完就不要的CGI程序,因此,编写它们时常常不考虑安全性。这种疏忽可以导致一些缺陷,使得仅对系统具有一般知识的人也能进入系统任意走动。尽管ShellCGI程序最容易写,甚至只需拼
2、凑一下即可,但控制它们却很困难,因为它们一般是通过执行外部的其他程序来完成工作的。这就导致一些可能的隐患,CGI程序会继承任何它使用的程序的安全问题。例如,常用UNIX实用程序ait按钮时,Netscape将一个长串字符放入Location字段,该串由CGI的URL后接一串数据组成,大部分看起来像表单中定义的NAMES和VALUES。如果愿意的话,可以自由地编辑Location字段的内容并按自己的意愿修改数据:增加表单中没有的字段,扩展由MAXLENGTH选项限制的文本数据,或者几乎任何对象。以下显示了某CGI脚本预期从表单
3、中提交的URL123下一页>>>>这篇文章来自..,。。cgi-bin?pg=qp;imt=q=%22An+Entirely+Other%22用户可以修改同一URL,CGI脚本仍被调用,但现在接收的是非预期的数据。为了保证安全,该脚本应该在编写时就设计为能将这种输入识别为不被要求的数据并加以拒绝。最后,某个有野心的"黑客"也许会写一个程序连到atch!}最后,可以更进一步,让CGI脚本能处理尽可能多的不同的输入表单。尽管不可能预期到可能发送给CGI程序的所有内容,但对某个特定方面一般经常有几种常用的方式,因而可以逐个检查。例
4、如,仅仅因为所写的表单使用POST方法向CGI脚本提交数据,并不意味着数据必须按那种方法进来。应该检查REQUEET_METHOD环境变量来确定是使用了GET还是POST方法并相应地读取数据,而不是假定数据都是来自预期的标准输入(stdin)。一个真正编写成功的CGI脚本能接收无论使用什么方法提交的数据并在处理过程中很安全。以下程序清单即是用Perl编写的一个例子。程序清单CGI_READ.PL一个充满活力的读取格式输入的程序#Takesthemaximumlengthalloeter#Returns1andtheradat
5、a,or"0"andtheerrortextsubcgi_Read{local($input_Max)=1024unless$input_Max=$_[0];local($input_Method)=$ENV{'REOUEST_METHOO');#CheckforeachpossibleREQUEST_METHODSif($input_Methodeq"GET"){#"GET"local($input_Size)=length($ENV{'QUERY_STRING'});#Checkthesizeoftheinputif($
6、input_Size>$input_Max){return(0,"inputtoobig");}#ReadtheinputfromQUERY_STRINGreturn(1,$ENV{'QUERY_TRING'});}elsif($input_Methodeq"POST"){#"POST"local($input_Size)=$ENV{'CONTENT_LENGTH'};local($input_Data);#Checkthesizeoftheinputif($input_Size>$input_Max)上一页12
7、3下一页>>>>这篇文章来自..,。{return(0,"Inputtoobig");}#Readtheinputfromstdinunless(read(STDIN,$input_Data,$input_Size)){return(0,"CouldnotreadSTDIN");}return(1,$Input_Data);}#UnrecognizedMETHODreturn(0,"METHODnotGETPOST");}总而言之,脚本应该不对接收的表单数据进行假设,应尽可能预计意料之外的情形并正确地处理不正确的或错误的输入
8、数据。在使用数据之前应按尽可能多的方式测试它;拒绝不合理的输入并打印一条错误消息;如果某项出错或漏了应自动选择一个缺省值;甚至可以试图对输入进行编码以成为程序的合理的输入。选择哪种方式依赖于自己想花费多少时间和精力,不过记住永远也不要盲目接收传给CGI脚来的所有信息。2.5不要相信路径数据
此文档下载收益归作者所有