web-dev-qa-db-ja.com

PHPがシェルコマンドを実行しないようにするにはどうすればよいですか?

apacheがbashスクリプトを実行しないようにする方法は??どのphpスクリプトもbashでコマンドを実行できないこと(たとえば、私のphpファイルとhtmlファイルへのリンクを追加するコマンド)。それを行う方法はありますか?

編集:.shファイルだけでなくbashコマンドも頭に浮かびました

2
B14D3

Open_basedir構成パラメーターを確認することをお勧めします。あなたの質問に対する答えではありませんが、関連しています。 「/ var/www/site:/ usr/share/php:/ tmp」のようにサイトごとにbasedirを設定することをお勧めします。 (/ usr/share/phpはマシンごとに異なる場合があります)。

あなたの質問に本当に答えるには:これを.htaccessに入れることもできます:

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

Apacheは、それ自体では、bashスクリプトまたはコマンドを「実行」できません。あなたが本当に尋ねている質問は、「PHPがシェルコマンドを実行するのを防ぐにはどうすればよいですか?」ということだと思います。

残念ながら、ここでの他の2つの答えは正しくなく、これを達成するための不十分な解決策を提供します。

_open_basedir_は、PHPによって実行できるファイルにのみ影響します開く例: fopen()を介して。次の簡単なコードを使用して、シェルコマンドを実行できることをテストできます。

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

シェルコマンドの実行を本当に制限するには実行 by PHP使用する必要があります セーフモード 。ただし、セーフモードはPHP 5.3で非推奨になり、将来のバージョンで確実に削除されます。セーフモードを有効にすると、-へのアクセスが制限されます 「安全でない」関数の数 、特にexec()system()、およびpassthru()

ただし、セーフモードの使用は強くお勧めしませんであることに注意してください。

セーフモードが削除されると、PHPで実行できるコマンドを制限する手段がなくなります。

3
hobodave

Php.iniのdisable_functionsディレクティブを使用して、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

2
James Yale