首页 >> 读书频道 >> 电脑 >> Perl CGI 程式写作常问问题集(六)
 
· WebSphere快速入
· XML和现代CGI应用程
· 安装好你的机器来使用JS
· 在windows2000
· JSWDK(JavaSe
· perl中的日期处理
· 在Perl/CGI中使用
· PERL与MySQL(D
· Perl 程序的属性祥解
· Perl CGI 环境变
· 使用JDK 1.4中的r
· Perl的经典用法
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

Perl CGI 程式写作常问问题集(六)


查看有无更新版本

关键字:CGI/PERL 2006-9-20

 

 5.0 -安全

----------------------------------------------------------------------

Q5.1: 以 Perl 写成的 CGI 程式是不是不如以 shell 或 C
写的来得安全?

这个问题的答案是: CGI
程式先天上就不安全,不管它是用那个语言写成的*。

【译者□
WWW 及 CGI 操作安全 FAQ

(<http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html>)
中问题第 31 对此有深入的探讨。

----------------------------------------------------------------------

Q5.2:我该特别留意哪些安全事项?

绝对不要对 shell 暴露任何 form 资料。底下这几项通通都是安全漏洞:

* open(COMMAND, "/usr/ucb/finger $form_user");

* system("/usr/ucb/finger $form_user");

* @data = `usr/ucb/finger $form_user`;


话虽如此,在上面的第二种写法中,系统安全可藉著改变参数传送的方式而得以
改善。也就是将参数由字串方式传送(shell
会先解译),改为序列方式传
送。

system("/usr/ucb/finger", $form_user);

您同时应该阅读:

* 由 Lincoln Stein 所著,一份很完整的 WWW 及 CGI 操作安全 FAQ

(<http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html>

* Paul Phillips 所著,CGI 安全 FAQ
(<http://www.cerf.net/~paulp/cgi-security/safe-cgi.txt>


----------------------------------------------------------------------

Q5.3:为什麽大家都说
http://bigidiot.abuse-me.com/perl.exe?foo.pl
这样很危险?会有多糟?

极度危险!想想看如果我这麽做会发生什麽事:


http://bigidiot.abuse-me.com/cgi-bin/perl.exe?-e+format:%20c'

现在您同意了吧?避免这个恶梦发生的方法:

* 将 perl.exe 执行档由 ``cgi-bin'' 移到 server
根目录以外的目录里
去。
* 在 ``cgi-bin'' 里用批次档 (batch) script 来叫出您的 CGI
script。

以下是一例。假设您的 CGI script 叫做 ``sample.pl'' 而您的批次档叫
``simple.bat'':

@echo off
c:\dos_perl\perl.exe
c:\netscape\ns-home\docs\cgi-bin\simple.pl

现在,您可以做:

<A HREF="/cgi-bin/simple.bat">Click Here</A>


----------------------------------------------------------------------


Q5.4:要如何在程式中安全地使用逆向撇号(backticks,"`",位於键盘左上
角)?这麽做:
@ans = `grep'$user_field' some.file`;
是不是真的不安全?

是的!这非常危险!试想,如果 $user_field 含有这样的内容会有什麽後
果:

; rm -fr / ;

要达到相同的效果,一个比较安全的做法是*:

if (open GREP, "-|") {
@ans = <GREP>
} else {
exec("/usr/local/bin/grep", $user_field, "some.file")
|| die "Error exec'ing command", "\n";
}
close GREP;

【译者】如果读者对以上 open GREP, "-|"部份的句法有疑问,可
以参阅 perlipc manpages 中 Safe Pipe Opens一节的说明。


----------------------------------------------------------------------

Q5.5: /$user_variable/ 这个句法是不是 Perl 5 中的一个安全漏洞?

不!这不是个安全漏洞。但是如果您用 eval 指令在执行期 (runtime)
去评估
这个叙述,那麽,它会变成一个安全死角。例如这种做法可能很危险:

foreach $regexp (@all_regexps) {
eval "foreach (\@data) { push(\@matches, \$_) if
m|$regexp|o; }";
}


----------------------------------------------------------------------

 

这个叙述,那麽,它会变成一个安全死角。例如这种做法可能很危险:

foreach $regexp (@all_regexps) {
eval "foreach (\@data) { push(\@matches, \$_) if
m|$regexp|o; }";
}

Perl CGI 程式写作常问问题集(六)

[ 1 ]
Perl CGI 程式写作常问问题集(六) num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑