jorton      2004/10/19 08:02:26

  Modified:    perl-framework/t/conf extra.conf.in
  Added:       perl-framework/t/htdocs/php/safemode badenv.php hello.txt
                        protected.php putenv.php readfile.php readpass.php
                        system.php
               perl-framework/t/htdocs/php/safemode/error mail.php
               perl-framework/t/htdocs/php/safemode/noexec system.php
               perl-framework/t/htdocs/php/safemode/nofile readfile.php
               perl-framework/t/php safemode.t
  Log:
  Add tests for PHP safe mode.
  
  Revision  Changes    Path
  1.55      +24 -0     httpd-test/perl-framework/t/conf/extra.conf.in
  
  Index: extra.conf.in
  ===================================================================
  RCS file: /home/cvs/httpd-test/perl-framework/t/conf/extra.conf.in,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -d -w -u -r1.54 -r1.55
  --- extra.conf.in     15 Oct 2004 16:19:58 -0000      1.54
  +++ extra.conf.in     19 Oct 2004 15:02:25 -0000      1.55
  @@ -48,6 +48,30 @@
       </IfModule>
   </IfDefine>
   
  +<IfModule @PHP_MODULE@>
  +    <Directory @SERVERROOT@/htdocs/php/safemode>
  +        php_admin_value safe_mode 1
  +        php_admin_value safe_mode_exec_dir /usr/bin
  +        php_admin_value open_basedir @SERVERROOT@
  +        php_admin_value display_errors 0
  +        php_admin_value log_errors 1
  +        php_admin_value safe_mode_allowed_env_vars FOO_
  +        php_admin_value safe_mode_protected_env_vars FOO_FEE
  +    </Directory>
  +
  +    <Directory @SERVERROOT@/htdocs/php/safemode/noexec>
  +        php_admin_value safe_mode_exec_dir /tmp
  +    </Directory>
  +
  +    <Directory @SERVERROOT@/htdocs/php/safemode/nofile>
  +        php_admin_value open_basedir @SERVERROOT@/htdocs/php/safemode/nofile
  +    </Directory>
  +
  +    <Directory @SERVERROOT@/htdocs/php/safemode/error>
  +        php_admin_value display_errors 1
  +    </Directory>
  +</IfModule>
  +
   ##
   ## mod_expires test config
   ##
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/badenv.php
  
  Index: badenv.php
  ===================================================================
  <?php putenv("FISH=HelloWorld");
  echo getenv("FISH"); ?>
  
  
  
  1.1                  httpd-test/perl-framework/t/htdocs/php/safemode/hello.txt
  
  Index: hello.txt
  ===================================================================
  This is Content.
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/protected.php
  
  Index: protected.php
  ===================================================================
  <?php putenv("FOO_FEE=HelloWorld");
  echo getenv("FOO_FEE"); ?>
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/putenv.php
  
  Index: putenv.php
  ===================================================================
  <?php putenv("FOO_BAR=HelloWorld");
  echo getenv("FOO_BAR"); ?>
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/readfile.php
  
  Index: readfile.php
  ===================================================================
  <?php readfile("hello.txt"); ?>
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/readpass.php
  
  Index: readpass.php
  ===================================================================
  <?php readfile("/etc/passwd"); ?>
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/system.php
  
  Index: system.php
  ===================================================================
  <?php system("printf 'Hello World'"); ?>
  
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/error/mail.php
  
  Index: mail.php
  ===================================================================
  <?php
  // fix for CAN-2002-0985: mail() must reject 5th argument in safe mode
  if (mail("[EMAIL PROTECTED]", "httpd-test PHP mail", 
         "test mail from httpd-test", "", "-C/etc/passwd")) {
        print("FAIL");
  } else {
        print("OK");
  }
  ?>
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/noexec/system.php
  
  Index: system.php
  ===================================================================
  <?php system("/bin/ls /"); ?>
  
  
  
  1.1                  
httpd-test/perl-framework/t/htdocs/php/safemode/nofile/readfile.php
  
  Index: readfile.php
  ===================================================================
  <?php readfile("../hello.txt"); ?>
  
  
  1.1                  httpd-test/perl-framework/t/php/safemode.t
  
  Index: safemode.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestRequest;
  use Apache::TestUtil;
  
  plan tests => 9, have_php;
  
  ok t_cmp(GET_BODY("/php/safemode/system.php"),
           "Hello World\n");
  
  ok t_cmp(GET_BODY("/php/safemode/putenv.php"), 
           "HelloWorld",
           "testing for unrestricted envvar access");
  
  ok t_cmp(GET_BODY("/php/safemode/badenv.php"), "",
           "testing for restricted envvar access");
  
  ok t_cmp(GET_BODY("/php/safemode/protected.php"),
           "", 
           "testing for explicitly restricted envvar access");
  
  if (-r "/etc/passwd") {
      ok t_cmp(GET_BODY("/php/safemode/readpass.php"),
               "",
               "testing that open_basedir is respected");
  } else {
      skip "Can't test inability to read /etc/passwd", 1;
  }
  
  ok t_cmp(GET_BODY("/php/safemode/readfile.php"), 
           "This is Content.\n",
           "testing that readfile is not restricted");
  
  ok t_cmp(GET_BODY("/php/safemode/nofile/readfile.php"),
           "", "testing that open_basedir is respected");
  
  ok t_cmp(GET_BODY("/php/safemode/noexec/system.php"),
           "", "testing that system() is restricted");
  
  ok t_cmp(GET_BODY("/php/safemode/error/mail.php"),
           qr/Warning.*SAFE MODE.*OK/s,
           "testing that the fifth parameter to mail() is restricted");
  
  
  
  

Reply via email to