2011-10-27 21 views
0

有没有什么办法来锁定对某些内置php函数的访问,例如rmdir(),并且允许某些其他函数/方法/对象访问它?PHP指定访问构建函数

+0

很好理解你为什么想要这样做。 –

回答

0

您可以覆盖功能与runkit_function_redefine,但你也必须在php.ini中设置runkit.internal_override否则你只能覆盖用户功能空间。

一旦你已经覆盖rmdir(),你可以把它做任何你想要的:什么都不做,只在某些目录的工作,只有当一个会话变量设置等工作...

我没试过ADP之前,但您也可以使用override_functionrename_function。您可以将rmdir()重命名为rmdir_hidden(),并在给定条件下覆盖内置名称以调用新名称。仍然可以拨打rmdir_hidden(),但只有如果编码器知道它已被重命名为。

顺便说一句 - 我认为在PHP中重新定义内置函数并不是一个好主意。也许在你实施这个之前,你应该仔细看看你在做什么以及为什么要这样做。在我工作过的所有PHP项目中,我从来没有见过或考虑过重写一个内置函数。

3

http://php.net/manual/en/ini.core.php

检查disable_functions选项属性:

disable_functions选项

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

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

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

0

在php.ini中查找disable_functions。

1

有一个disable_functionsconfiguration parameter。但是,一旦通过此路线禁用了功能,它就不能再次启用。

除此之外,你不能限制存取任何的内置函数在PHP

0

disable_functions是全球性的,所以我建议使用它作为最后的手段。

在rmdir()和其他文件系统函数的情况下,您可以确保用户PHP在(可能是apache)下运行,但没有修改您不想要的文件和文件夹的权限。

作为更一般的考虑因素。如果您允许不信任的人执行代码,您可能需要重新考虑您的设计!