我想在服务器上禁用一些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中设置这个指令。