如何防止 PHP 执行 shell 命令?

如何防止 PHP 执行 shell 命令?

如何防止 apache 执行 bash 脚本??任何 php 脚本都无法在 bash 中执行命令(例如,将链接添加到我的 php 和 html 文件的命令)。有办法吗??

编辑:我脑子里想的不仅仅是 .sh 文件,还有任何 bash 命令

答案1

您可能需要查看 open_basedir 配置参数。这实际上不是您问题的答案,但它是相关的。为每个站点设置一个 basedir 是个好主意,例如“/var/www/site:/usr/share/php:/tmp”。(每台机器上的 /usr/share/php 可能不同)。

真正回答您的问题:您也可以将其放在.htaccess中:

<Files *.sh>
  ForceType 'text/plain; charset=UTF-8'
</Files>

答案2

您可以使用disable_functionsphp.ini 中的指令禁用对 PHP 中特定功能的访问,例如:

disable_functions = exec,system,print

或者,如果您想阻止 PHP 编辑其他文本文件的内容(如您的评论中所述),您可以使用文件系统权限保护它们 - 使得 Web 服务器用户(或 PHP 执行的用户)对这些文件没有写权限。

參考文獻:

http://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

http://www.webhostgear.com/319.html

答案3

Apache 本身无法“执行”bash 脚本或命令。我认为您真正想问的问题是“如何才能阻止 PHP 执行 shell 命令?”。

不幸的是,这里的另外两个答案是不正确的,并且没有提供足够的解决方案来实现这一点。

open_basedir只影响哪些文件可以已打开通过 PHP,例如通过fopen()。你可以使用以下简单代码测试是否仍可执行 shell 命令:

<?php
ini_set('open_basedir', '/tmp');
system('ls');

要真正限制 shell 命令的使用范围执行通过 PHP 你必须利用安全模式。但你应该知道安全模式在 PHP 5.3 中已弃用,并且肯定会在将来的版本中删除。启用安全模式会限制对 “不安全”功能的数量,尤其是exec()system()passthru()

但是,您应该再次注意,使用安全模式极力劝阻

一旦安全模式被删除,您将不再能够限制 PHP 可以执行的命令。

相关内容