Apache-2.2

如何防止 PHP 執行 shell 命令?

  • March 3, 2011

如何防止 apache 執行 bash 腳本?任何 php 腳本都無法在 bash 中執行命令(例如,將添加指向我的 php 和 html 文件的連結的命令)。有沒有辦法做到這一點??

編輯:我想到的任何 bash 命令不僅是 .sh 文件

您可能想查看 open_basedir 配置參數。不是你問題的真正答案,但它是相關的。為每個站點設置一個 basedir 是個好主意,例如“/var/www/site:/usr/share/php:/tmp”。(每台機器上的 /usr/share/php 可能不同)。

要真正回答您的問題:您也可以將其放入 .htaccess 中:

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

Apache 本身不能“執行”bash 腳本或命令。我認為您真正要問的問題是“如何防止 PHP 執行 shell 命令?”。

不幸的是,這裡的其他兩個答案是不正確的,並且提供了不充分的解決方案來實現這一點。

open_basedir僅影響 PHP 可以打開哪些文件,例如通過fopen(). 您可以使用以下簡單程式碼測試是否仍然可以執行 shell 命令:

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

要真正限制 PHP 可以執行的 shell 命令,您必須使用安全模式。但是您應該知道,安全模式在 PHP 5.3 中已被棄用,並且肯定會在未來的版本中被刪除。啟用安全模式會限制對 許多“不安全”功能的訪問,特別是exec()system()passthru()

但是,您應該再次意識到,強烈建議不要使用安全模式。

一旦刪除了安全模式,您將不再擁有限制 PHP 可以執行哪些命令的方法。

引用自:https://serverfault.com/questions/236627