【问题标题】:Disable some php function on special directory在特殊目录上禁用一些 php 函数
【发布时间】:2016-12-27 04:48:03
【问题描述】:

我想禁用在特殊目录上执行一些 php 函数,例如 file_put_content,exec,eval

我可以在 php.ini 中使用disable_functions,但是如何定义像c:\poject\public 这样的特殊文件夹

【问题讨论】:

  • 设置适当的权限,如644
  • 你想禁用所有的php函数还是只禁用特定的函数

标签: php windows apache


【解决方案1】:

根据PHP documentation,除了在 php.ini 文件中之外,您不能在任何地方使用 disable_functions 设置。

如果您需要对每个虚拟主机或每个目录 功能进行限制,我建议使用PHP-FPM 的单独实例,每个实例都可以有自己的php.ini。它还提供额外的安全优势,例如每个守护程序实例的完整沙盒。

编辑:

你可以在official documentation阅读它

php-fpm example configuration 用于 UNIX 和 TCP 套接字。

【讨论】:

    【解决方案2】:

    如果您有一个工作版本的 php.ini 禁用了您想要的功能,那么您只需要将文件夹“链接”到该特定的 .ini 文件。这意味着您的网络服务器在从该目录提供文件时,应该使用该特定的 .ini 文件而不是系统文件。

    如果您使用 Apache2 作为服务器,可以找到解决方案 here 您可以为每个虚拟主机定义一个特定的 php.ini 文件。假设您的特定文件夹是/var/www/web1,您应该将禁用该功能的php.ini 放入/var/www/web1 并使用此Apache2 配置

    <VirtualHost 1.2.3.4:80>
    [...]
    PHPINIDir /var/www/web1
    [...]
    </VirtualHost>
    

    如果您不熟悉或不使用 VirtualHosts(但仍在使用 Apache2),另一种可能的解决方案是将 PHP 配置放入文件夹中名为 .htaccess 的文件中,语法如下:

    php_value disable_functions "file_put_content,exec,eval"
    

    【讨论】:

    • 你真的尝试过这些吗?我很确定你只能有一个全局加载 php 的 PHPINI 指令。此外,disable_functions 是您无法在 .htacess 中覆盖的系统设置。所以我认为两者都行不通。一种方法是让虚拟服务器运行不同的安装/版本的 php。这比你建议的更复杂,但应该有效。但仍然不是基于每个目录。但是,如果您尝试过,很高兴得到纠正。
    • 其实第二个也可以,但必须在 vhost 配置中
    • 我尝试了第二个,但没有成功。也不是第一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多