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

我想在服务器上禁用一些function来提高服务器的安全性。 我遵循这些步骤:

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

第2 disable_functions finddisable_functions并设置新列表,如下所示:disable_functions = exec,passthru,shell_exec,system

STEP:3服务httpd重启

借助上述步骤,我可以禁用所有上述function。 现在这些function在服务器上不再可用。

如果我想启用或禁用特定目录的这些function,那么它可能与否?

不可能以可靠的方式做到这一点。 正如我们站在,PHP不提供一个选项来某些function的白名单某些目录。 可以编写一个自定义函数,允许在某些目录中执行“禁止”函数,但这意味着您必须全局允许它们,这不会阻止程序员直接访问禁止的函数。

disable_functions设置仅在php.ini中可用,任何其他尝试覆盖它的方法都是不允许的(例如: ini_set或通过apacheconfiguration)。

所以真的有两个select,使用它,或不,但没有inbetween。

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

特别是:

这个指令必须在php.ini中设置。例如,你不能在httpd.conf中设置这个指令。

@slm这是一个策略,但这并不妨碍他们升级到目录的一侧,所以这真的是一个正面和晦涩的方式来做到这一点。 即使这将工作。

我想你可以把这个变成这样,而不是禁用你的php.ini文件中的函数,但是如果你使用Apache作为你的.htaccess文件或者你的Apache httpd.conf文件,networking服务器。 其他networking服务器最有可能提供这个function。

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

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

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

– 或者 – 重新启用它:

 # .htaccess in directory X php_value disable_functions null 

以上是没有经过我testing,所以我不知道它是否会为你工作。 我也可以理解PHP这个设施的一些混淆。 根据PHP文档 ,听起来不像以上是可能的php.ini文件之外。

disable_functionsstring

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

只有内部函数可以使用这个指令禁用。 用户定义的function不受影响。

这个指令必须在php.ini中设置。例如,你不能在httpd.conf中设置这个指令。