禁用htaccess中的php函数

时间:2013-01-26 01:47:47

标签: php .htaccess apache

我正在尝试创建一个受欢迎网站的私有克隆,它可以“在线编写PHP代码”作为个人练习。

  • 我在文本区域写了一些代码
  • 代码以某种方式执行服务器端
  • 输出

我希望输出与apache实例提供的输出完全一样,包含所有错误并警告我的代码生成。

现有的框架为网站网页(前端控制器,一个orm等)提供服务,所以我不能在PHP INI中使用禁用功能。或者一切都根本不可用。

我尝试将输入保存在文件中,然后使用如下的exec运行它:

exec("php -c mycustomphpinifile input.php 2>&1 > output.txt"); 

但输出的错误与apache的错误不同。

我试图采用的最终解决方案是使用httpd.conf或.htaccess中的php_value或php_admin_value来禁用危险函数的整个列表(如您所能)。

...然而

php_value disable_functions "my,functions,comma,separated"

似乎无法使用这么大的列表。 我必须禁用类似2k函数的东西:htaccess中的php_value是否有任何缓冲区大小问题?任何人都可以猜出这个问题的解决方案吗?

3 个答案:

答案 0 :(得分:6)

根据PHP documentation,您无法在disable_functions文件中的任何位置使用php.ini设置,因此我对此感到非常惊讶。

如果您需要每个vhost或每个目录的功能限制,我建议使用PHP-FPM的单独实例,每个实例都有自己的php.ini。它还提供了额外的安全性优势,例如每个守护程序实例的完整沙箱。

答案 1 :(得分:5)

无法在.htaccess中完成。更多信息here

但似乎可以这样做。请参阅“public_html中的.htaccess”部分添加以下内容:“here

php_flag short_open_tag Off
php_flag register_globals Off
php_flag display_errors Off
php_flag magic_quotes_gpc Off
php_value date.timezone "Europe/Athens"
php_value session.save_path "/absolute/path/to/writable/folder/one_level_up_of/public_html"

请注意其中的内容:

  

php_value disable_functions“system,exec,passthru,shell_exec,   suexec,dbmopen,popen,proc_open,disk_free_space,diskfreespace,   set_time_limit,泄漏“

关于那个的脚注:

  

这些设置只能通过默认的php.ini文件进行更改   没有按需配置,您无法访问php.ini   联系您的托管服务提供商为您设置它们!

修改 此外,您是否可以访问实际的Apache2虚拟主机配置?如果是这样,那么您可能想要研究如何使用suhosin.executor.func.blacklist; see this page。似乎这是在每个主机/域的基础上禁用PHP功能的更好方法。甚至可能是<Directory><Location>

<VirtualHost 127.0.0.1>
ServerAlias www.test.com
ServerAdmin webmaster@test.com
DocumentRoot /home/test/public_html

php_admin_value suhosin.executor.func.blacklist "passthru, show_source, shell_exec, system, pcntl_exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg"

</VirtualHost>

答案 2 :(得分:0)

您需要在php_admin_value文件或php_value文件中使用vhost.conf代替.htaccess

<Directory /your/application/dir>
    AllowOverride None
    DirectoryIndex index.html index.htm index.php
    php_flag log_errors on
    php_flag display_errors off
    php_value error_reporting 3
    php_value memory_limit 128M
    php_admin_value upload_tmp_dir "/your/application/dir/imagecache"
    php_value max_execution_time 10
    php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source"
</Directory>