如何禁用服务器上特定目录的功能?

如何禁用服务器上特定目录的功能?

我想禁用服务器上的某些功能以提高服务器的安全性。我遵循以下步骤:

步骤1 打开php.ini文件: vi /etc/php.ini

第2步 查找disable_functions并设置新列表如下:disable_functions= exec,passthru,shell_exec,system

步骤:3 服务 httpd 重启

通过上述步骤,我能够禁用上述所有功能。现在这些功能在服务器上不再可用。

如果我想为特定目录启用或禁用这些功能,那么可以吗?

答案1

不,不可能以可靠的方式做到这一点。就我们目前的情况而言,php 不提供将某些目录列入某些函数白名单的选项。可以编写一个自定义函数,允许在某些目录中执行“禁止”函数,但这意味着您必须全局允许它们,并且这不会阻止程序员直接访问被禁止的函数。

disable_functions 设置仅在 php.ini 中可用,不允许以任何其他方式尝试覆盖它(例如:ini_set或通过 apache 配置)。

所以实际上你有两个选择,使用它,或不使用,但没有中间选择。

来源: http://php.net/manual/en/ini.core.php#ini.disable-functions

尤其是这一点:

该指令必须在 php.ini 中设置,例如,您不能在 httpd.conf 中设置该指令。

@slm 这是一种策略,但无法阻止他们在目录之外升级,因此这实际上是一种表面的、隐晦的方法。即使这种方法可行。

答案2

我认为您可以扭转这种局面,不禁用文件中的功能,而是在文件或 Apache文件php.ini中逐个目录禁用它们(如果您使用 Apache 作为 Web 服务器)。其他 Web 服务器很可能也提供此功能。.htaccesshttpd.conf

根据这个博客文章php.ini,您可以在文件中覆盖 php 标志和值设置.htaccess

例如,您可以执行以下操作:

# .htaccess in directory X
php_value disable_functions exec,passthru,shell_exec,system

-或- 重新启用它:

# .htaccess in directory X
php_value disable_functions null

上述内容我尚未测试过,因此我不确定它是否适合您。此外,我也能理解人们对该设施的一些困惑PHP。根据PHP 文档听起来上述内容在php.ini文件之外是不可能的。

disable_functions 字符串

此指令允许您出于安全原因禁用某些功能。它采用逗号分隔的函数名称列表。disable_functions 不受安全模式的影响。

使用此指令只能禁用内部函数。用户定义的函数不受影响。

该指令必须在 php.ini 中设置,例如,您不能在 httpd.conf 中设置该指令。

相关内容