文摘首页 >> 网页制作·视觉设计·3D STUDIO·FLASH制作·网络攻防·病毒播报·编程开发·系统维护·网站经营·视频剪辑·文摘论坛
 







线




访




 
 ■ 您现在的位置: 福建大学生在线 >> 文摘 >> 编程开发 >> 其他相关文章 >> 文摘正文
 
中文版 Perl CGI 程式写作常问问题集
作者:未知 文章来源:网络 点击数: 更新时间:2006-7-3 9:47:00


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

5.0 - 安全

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

Q5.1: 以 Perl 写成的 CGI 程式是不是不如以 shell 或 C 写的来得安全?
这个问题的答案是: CGI 程式先天上就不安全,不管它是用那个语言写成的*。

【译者】WWW 及 CGI 操作安全 FAQ 中问题第 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

Paul Phillips 所着,CGI 安全 FAQ


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

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; }";

}
-----------------------------------------------------
END


 

上一页  [1] [2] [3] [4] [5] [6] 

文摘录入:一叶知秋    责任编辑:一叶知秋 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
  • 上一篇文摘:

  • 下一篇文摘:
  • 版权所有:福建大学生在线(www.fjstu.net)All Right Reserved 2003-2006
    福建大学生在线站务组 - 有你的加入更精彩 - 站务成员全年招募中
    网站备案号:闽ICP备05000367号 广告投放QQ:383870619 欢迎商家加盟