在Web服务器环境中启用PHP中的PROCESS CONTROL(PCNTL)会产生什么副作用?

时间:2011-03-12 07:21:57

标签: php security pcntl process-control


以下是http://www.php.net/manual/en/intro.pcntl.php

的报价
Process Control should not be enabled within a web server environment and unexpected results 
may happen if any Process Control functions are used within a web server environment.

在我的网络服务器上启用它有什么副作用?它的威胁和安全问题是什么?

非常感谢你的帮助

2 个答案:

答案 0 :(得分:5)

启用扩展程序和使用这些功能之间存在很大差异。只是启用扩展应该没有任何副作用。

另一方面,提供的功能可能会带来一些恶作剧。 Forks can be abusedsignals can be sent到其他进程,告诉他们执行您可能不想要的操作,并且可以修改与Web服务器守护程序具有相同所有者的priorities of processes

换句话说,除非你控制在该机器上运行的所有PHP,例如在共享托管环境中,否则它不是你想要启用的东西。

答案 1 :(得分:4)

如果启用此功能,不受信任的PHP代码作者可以fork-bomb您的服务器,这比您想象的更难防范。

不受信任的PHP代码作者可能会终止或暂停Web服务器,或者与Web服务器作为同一用户运行的任何进程。 (如果Web服务器以root身份运行不受信任的PHP代码,则它可以停止或挂起服务器上的所有进程。)或者,如果您使用的是FastCGI或类似工具,它可能会终止或挂起作为同一用户运行的任何其他任务。

不受信任的PHP代码作者可以调用wait(2)系列函数,这将极度混淆服务器或FastCGI接口。它可能会挂起它,它可能会导致它崩溃,取决于服务器。

当然,PHP进程控制标志实际上只是建议 - PHP解释器中的错误将允许恶意代码作者所有这些和更多。这个设置只是为了让诚实的程序员诚实。

您在mod_php(或其他服务器的类似技术)中运行的任何代码都可以完全访问Web服务器可以执行的所有操作。

您在FastCGI(或类似技术)中运行的任何代码都可以完全访问FastCGI系统可以执行的所有操作,具体取决于操作系统的访问控制。

如果你真的想限制不受信任的PHP代码可以做什么,我建议调查不同的强制访问控制机制,例如AppArmorTOMOYOSELinux或{{3 }}