1

PHP disable_functions に問題があります。suPHP FastCGI PHP > 5.3.0 を実行している Apache サーバーで、仮想ホストごとに disable_functions 値を設定しようとしています。そのために私がやっていることは、suPHP 構成で suPHP_ConfigPath の使用を無効にして、ユーザーが独自の php.ini ファイルを使用できないようにすることです。次に、グローバル php.ini ファイルで、php セクションの [PATH] ディレクティブを使用して、特定の仮想ホストでカスタムの disable_functions を構成します。何かのようなもの:

php.ini ファイル

...
disable_functions = shell_exec, exec

[PATH=/home/someuser/public_html]
disable_functions =
...

その仮想ホストのphp構成をphpinfoファイルでチェックすると、正しい期待値が得られます。Disable_functions ディレクティブには、ローカル値 = 値なし、マスター値 = shell_exec、exec があります。しかし、shell_exec を使用するテスト スクリプトを実行すると、サーバーがブロックし、セキュリティ上の理由から shell_exec が無効になっていることを示すエラーが表示されます。これは、PHP が disable_functions ローカル値を無視し、代わりにマスター値を使用していることを意味します。

[PATH] [HOST] PHP セクションのドキュメントでは、これらのセクションで無効化機能を構成できるはずなので、期待どおりに機能しない理由を理解できません。ドキュメントと同様に、セクションでは extension および zend_extension ディレクティブのみを使用しないでください。

私はすでに他のディレクティブ PHP_INI_SYSTEM と php.ini のみのディレクティブ (expose_php) でテストしており、すべてが期待どおりに機能しました。だから私は完全に道に迷っており、何が起こっているのか理解できません。

完全を期すために、FastCGI + SuExec PHP > 5.3.0 (suPHP と同様の構成ですが、まったく同じではない) を実行している Apache サーバーでテストしましたが、同じことが起こり、disable_functions ローカル値は無視されます。

これがうまくいかない正当な理由を知っている人はいますか?PHPのバグですか?私が考慮していないことがありますか?

4

1 に答える 1

2

PHP マニュアルには、disable_functionsはマスターphp.iniでのみ設定できることが明確に記載されています。ローカル値は設定でき、phpinfo() で表示できますが、効果はないようです (少なくとも PHP 5.5 では)。

これを回避するには、vhost ごとのauto_prepend_file (または vhost ごとのサブインクルードを持つ 1 つのグローバル) を使用します。含まれているスクリプトは、uopz_delete()を呼び出します。PHP のバージョンや OS などでuopz PECL 拡張機能が利用できない場合は、 APDrunkitなどの他の拡張機能を試すことができます。これらには、他の PHP 関数を削除/クロークする同様の機能があるためです。

uopz を使用したソリューションは、PHP 5.5.9 で Ubuntu を実行しているいくつかの実稼働サーバーでテストされています。パフォーマンスに大きな影響を与えたり、不安定になったりすることはないようです。

于 2015-02-13T18:20:46.797 に答える