网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 网站开发-> CGI/PERL-> Perl CGI 程式写作常问问题集(六)

Perl CGI 程式写作常问问题集(六)
作者:佚名 来源:InterNet 加入时间:2005-3-30
相关文章
  • Perl CGI 程式写作常问问题集(五)
  • Perl CGI 程式写作常问问题集(四)
  • Perl CGI程式写作常问问题集(三)
  • 中文版Perl CGI程式写作常问问题集(二)
  • Perl CGI 程式写作常问问题集(一)
  • 相关书籍:
    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; }";
    }


    [文章录入员:nancy]

    相关文章
  • Perl CGI 程式写作常问问题集(五)
  • Perl CGI 程式写作常问问题集(四)
  • Perl CGI程式写作常问问题集(三)
  • 中文版Perl CGI程式写作常问问题集(二)
  • Perl CGI 程式写作常问问题集(一)
  • 相关书籍:
    本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    CGI/PERL
    ASP/ASP.NET
    PHP技术
    JSP技术
    XML技术
    CGI/PERL
    WEB服务器
    WordPress专题
    其它
    电脑教程阅读排行
    ·perl中的日期处理
    ·深入研究表单提交方式:GET/P...
    ·如何利用Perl开发Intern...
    ·CGI应用程序开发基础
    ·本地调试PERL CGI程序
    ·PERL与MySQL(DBI接口...
    ·PerlScript编写ASP
    ·CGI编程--Perl的安装配置
    ·Perl用于实现遗传算法
    ·ASP、CGI、ISAPI、OD...