禁用htaccess中的php函数

Dam*_*ati 3 php apache .htaccess

我正在尝试创建一个流行网站的私有克隆,它可以"在线编写PHP代码"作为个人练习.

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

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

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

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

exec("php -c mycustomphpinifile input.php 2>&1 > output.txt"); 
Run Code Online (Sandbox Code Playgroud)

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

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

然而...

php_value disable_functions "my,functions,comma,separated"
Run Code Online (Sandbox Code Playgroud)

看起来不像这么大的名单.我必须禁用类似2k函数的东西:htaccess中的php_value是否有任何缓冲区大小问题?任何人都可以猜出这个问题的解决方案?

小智 6

根据PHP文档,你不能disable_functionsphp.ini文件以外的任何地方使用该设置,所以我很惊讶这是在工作.

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


Jak*_*uld 5

这不可能在一个.htaccess.更多信息在这里.

但似乎可以这样做.指的是各国在.htaccess在你的public_html添加以下内容:"一节在这里:

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"
Run Code Online (Sandbox Code Playgroud)

注意它说明的地方:

php_value disable_functions"system,exec,passthru,shell_exec,suexec,dbmopen,popen,proc_open,disk_free_space,diskfreespace,set_time_limit,leak"

关于这一点的脚注:

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

编辑: 此外,你有权访问实际的Apache2虚拟主机配置?如果是这样,那么你可能想研究如何使用suhosin.executor.func.blacklist; 看到这个页面.似乎这是在每个主机/域的基础上禁用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>
Run Code Online (Sandbox Code Playgroud)