3

私は、個人的な練習として「PHPコードをオンラインで書く」可能性を与える人気のあるWebサイトのプライベートクローンを作成しようとしています.

  • テキストエリアにコードを書く
  • コードはサーバー側で何らかの方法で実行されます
  • 出力が返されます

コードが生成したすべてのエラーと警告を使用して、Apache インスタンスによって提供される場合とまったく同じように出力したいと考えています。

サイトの Web ページ (フロント コントローラー、orm など) を提供する既存のフレームワークがあるため、PHP INI で無効化機能を使用できません。または、すべてがまったく使用できなくなります。

入力をファイルに保存してから、次のようなexecで実行しようとしました:

exec("php -c mycustomphpinifile input.php 2>&1 > output.txt"); 

ただし、出力されるエラーは apache のものと同じではありません。

私が採用しようとしている最終的な解決策は、httpd.conf または .htaccess 内で php_value または php_admin_value を使用して、(ご想像のとおり) 危険な関数のリスト全体を無効にすることです。

でも...

php_value disable_functions "my,functions,comma,separated"

見た目ほど大きなリストでは機能しません。2k 関数などを無効にする必要があります。htaccess 内の php_value にバッファ サイズの問題はありますか? 誰でもこの問題の解決策を推測できますか?

4

3 に答える 3

6

PHP のドキュメントによると、このdisable_functions設定はファイル以外では使用できないため、php.iniこれがまったく機能していることに非常に驚いています。

関数に対して vhost ごとまたはディレクトリごとの制限が必要な場合は、それぞれが独自の を持つことができるPHP-FPMphp.iniの個別のインスタンスを使用することをお勧めします。また、デーモン インスタンスごとの完全なサンドボックス化など、追加のセキュリティ上の利点も提供します。

于 2013-01-26T02:03:16.210 に答える
5

それは ではできません.htaccess。詳細はこちら

でも、こんな感じで出来そうです。「あなたの public_html の .htaccess に次を追加してください: 」と記載されているセクションを参照してください。

php_flag short_open_tag Off
php_flag register_globals Off
php_flag display_errors Off
php_flag magic_quotes_gpc Off
php_value date.timezone "Europe/Athens"
php_value session.save_path "/absolute/path/to/writable/folder/one_level_up_of/public_html"

それが述べているところに注意してください:

php_value disable_functions "system、exec、passthru、shell_exec、suexec、dbmopen、popen、proc_open、disk_free_space、diskfreespace、set_time_limit、leak"

そしてそれに関する脚注:

これらの設定は、必要に応じて構成されておらず、php.ini にアクセスできない場合は、デフォルトの php.ini ファイルを介してのみ変更できます。ホスティング プロバイダーに連絡して設定を依頼してください。

編集: また、実際の Apache2 仮想ホスト構成にアクセスできますか? その場合は、suhosin.executor.func.blacklist代わりに使用方法を調査することをお勧めします。このページを参照してください。これは、ホスト/ドメインごとに PHP 機能を無効にするためのより良い方法のようです。<Directory>おそらく、またはあたりでさえ<Location>

<VirtualHost 127.0.0.1>
ServerAlias www.test.com
ServerAdmin webmaster@test.com
DocumentRoot /home/test/public_html

php_admin_value suhosin.executor.func.blacklist "passthru, show_source, shell_exec, system, pcntl_exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg"

</VirtualHost>
于 2013-01-26T01:57:52.300 に答える