欢迎来到天天文库
浏览记录
ID:9687148
大小:53.00 KB
页数:3页
时间:2018-05-05
《cgi教学-cgi安全问题(三)--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、CGI教学:CGI安全问题(三)>>2.4拒绝不合要求的表单数据CGI脚本可以有几种方式拒绝接收提交给它的非预期的输入。编写CGI时应该使用其中一些技巧或所有这些技巧。首先,CGI脚本应设置接收多少数据的限制,不仅限制整个提交,也限制提交中的每个NAME/VALUE对。例如,CGI脚本读取POSTMETHOD,检查CONTENT-LENGTH环境变量的大小来确定某输入是不是合理的预期输入。如果CGI脚本设计接收的唯一数据是某人的姓名,那么如果CONTENT-LENGTH大于100字节,就应该有理由返回一个错误。没有
2、哪个合理的姓有那么长,通过设置限制,就能使脚本不再盲目地读取发送给它的内容。注意令人高兴的是,不必担心去限制通过POST方法提交的数据。GET是自限制的并且不会向脚本发送多于1KB的数据。服务器自动限制放人QUERY-STRING环境变量中的数据的大小,而这正是GET发送给CGI程序的信息。当然,"黑客"们可以很容易地将表单由GET改为PUT从而绕过这种内置的限制。至少,程序应该检查一下数据是否是用预期的方法提交的;最好是能正确且安全地处理两种方法。下一步,应保证脚本知道在接收到不能识别的数据时该怎么办,例如,如果
3、某表单要求用户选择两个单选按钮之一,脚本就不应该假设因为一个按钮未被选择,另一个就一定被选择了。下面的Perl代码就犯了这样的错误:if($form_Data{"radio_choice"}eq"button_one"){#ButtonOnehasbeenclicked}else{#ButtonT_Data{"radio_choice"}eq"button_one"){#ButtonOneseleted}elsif($form_Data{"radio_choice}eq"button_toveptystringif
4、($user_inputeq$secret_atch!}最后,可以更进一,让CGI脚本能处理尽可能多的不同的输入表单。尽管不可能预期到可能发送给CGI程序的所有内容,但对某个特定方面一般经常有几种常用的方式,因而可以逐个检查。例如,仅仅因为所写的表单使用POST方法向CGI脚本提交数据,并不意味着数据必须按那种方法进来。应该检查REQUEET_METHOD环境变量来确定是使用了GET还是POST方法并相应地读取数据,而不是假定数据都是来自预期的标准输入(stdin)。一个真正编写成功的CGI脚本能接收无论使用什么方
5、法提交的数据并在处理过程中很安全。以下程序清单即是用Perl编写的一个例子。程序清单CGI_READ.PL一个充满活力的读取格式输入的程序#Takesthemaximumlengthalloeter#Returns1andtheradata,or"0"andtheerrortextsubcgi_Read{local($input_Max)=1024unless$input_Max=$_[0];local($input_Method)=$ENV{'REOUEST_METHOO');#Checkforeachpossi
6、bleREQUEST_METHODSif($input_Methodeq"GET"){#"GET"local($input_Size)=length($ENV{'QUERY_STRING'});#Checkthesizeoftheinputif($input_Size>$input_Max){return(0,"inputtoobig");}#ReadtheinputfromQUERY_STRINGreturn(1,$ENV{'QUERY_TRING'});}elsif($input_Methodeq"POS
7、T"){#"POST"local($input_Size)=$ENV{'CONTENT_LENGTH'};local($input_Data);#Checkthesizeoftheinputif($input_Size>$input_Max){return(0,"Inputtoobig");}#Readtheinputfromstdinunless(read(STDIN,$input_Data,$input_Size)){return(0,"CouldnotreadSTDIN");}return(1,$Inp
8、ut_Data);}#UnrecognizedMETHODreturn(0,"METHODnotGETPOST");} 总而言之,脚本应该不对接收的表单数据进行假设,应尽可能预计意料之外的情形并正确地处理不正确的或错误的输入数据。在使用数据之前应按尽可能多的方12下一页>>>>这篇文章来自..,。式测试它;拒绝不合理的输入并打印一条错误消息;如果某项出错或漏
此文档下载收益归作者所有