我想禁用服务器上的某些功能以提高服务器的安全性。我遵循以下步骤:
步骤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 服务器很可能也提供此功能。.htaccess
httpd.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 中设置该指令。