<font face="Verdana" size="2">マニュアルには次のように書かれています: <br>第 24 章 セーフ モード<br>ディレクトリ<br>セーフ モードによって制限またはブロックされる機能<br>PHP のセーフ モードは、共有サーバーのセキュリティ問題を解決する試みとして確立されました。この問題をPHP層で解決しようとするのは構造的に無理がありますが、WEBサーバー層やオペレーティングシステム層を修正するのは非常に非現実的です。現在、非常に多くの人、特に ISP がセーフ モードを使用しています。 <br><br><br>表 24-1. セーフ モードを制御する設定オプションは次のとおりです: <br><br>オプションのデフォルト値を設定します<br>safe_mode Off <br>safe_mode_gid 0 <br>safe_mode_include_dir "" <br>safe_mode_exec_dir 1 <br>open_basedir "" <br>safe_mode_allowed_env_vars PHP_ <br>safe_mode_protected_env_vars LD_LIBRARY_PATH <br>disable_functions "" <br><br><br>safe_mode が on に設定されている場合、PHP はの所有者現在のスクリプトは file 関数によって操作されているファイルの所有者と一致します。例: -rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php <br>-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd <br> <br>Run script.php <?php <br/>readfile('/etc/passwd'); <br/><br/>セーフ モードが有効になっている場合、次のエラーが発生します。 : セーフ モード制限が有効です。uid が 500 のスクリプトは、/docroot/script.php の 2 行目で uid 0 が所有する /etc/passwd へのアクセスを<br/><br/><br/><br/>できません。 >同時に、緩やかな GID チェックで十分だが、厳密な UID チェックは不適切な環境も存在する可能性があります。このチェックは、safe_mode_gid オプションを使用して制御できます。オンに設定すると、緩和された GID チェックが実行されます。オフ (デフォルト) に設定すると、UID チェックが実行されます。 <br/><br/>safe_mode に加えて、open_basedir オプションを設定すると、すべてのファイル操作が指定したディレクトリに制限されます。例: <Directory /docroot> <br>php_admin_value open_basedir /docroot <br></Directory> <br><br> open_basedir オプションを設定して同じ script.php を実行すると、結果は次のようになります。 : open_basedir 制限が有効です。ファイルは <br>/docroot/script.php の 2 行目で間違ったディレクトリにあります。<br><br><br><br>特定の機能を個別にブロックすることもできます。 disable_functions オプションは php.ini ファイルの外部では使用できないことに注意してください。つまり、httpd.conf ファイル内の別の仮想ホストまたは別のディレクトリによって機能を無効にすることはできません。 次の内容を php.ini ファイルに追加すると、disable_functions readfile,system <br><br> が表示されます。 警告: <br>/docroot/script では、セキュリティ上の理由から readfile() が無効になっています。 .php 行 2 <br><br><br><br>セーフ モードによって制限またはブロックされる機能 <br>次のセーフ モードのリストは不完全であるか、間違っている可能性があります。 <br><br>表 24-2. セーフ モードの制限関数 <br><br>関数名 制限 <br>dbmopen() は、操作しようとしているファイル/ディレクトリがスクリプトと同じ UID を持つかどうかを確認します。処刑されている。 <br>dbase_open() は、操作しようとしているファイル/ディレクトリが、実行されているスクリプトと同じ UID を持つかどうかを確認します。 <br>filepro() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 <br>filepro_rowcount() は、操作しようとしているファイル/ディレクトリが、実行されているスクリプトと同じ UID を持つかどうかを確認します。 <br>filepro_retrieve() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 <br>ifx_*() sql_safe_mode 制限、(!= セーフ モード) <br>ingres_*() sql_safe_mode 制限、(!= セーフ モード) <br>mysql_*() sql_safe_mode 制限、(!= セーフ モード) <br>pg_loimport() は、操作しようとしているファイル/ディレクトリが実行中のスクリプトと同じ UID を持つかどうかを確認します。 <br>posix_mkfifo() は、操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかを確認します。 <br>putenv() は、ini によって設定されたsafe_mode_protected_env_vars オプションとsafe_mode_allowed_env_vars オプションを尊重します。 putenv() 関数のドキュメントを参照してください。 <br>move_uploaded_file() は、操作しようとしているファイル/ディレクトリが、実行されているスクリプトと同じ UID を持つかどうかを確認します。 <br>chdir() は、操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかを確認します。 <br>dl() この関数はセーフ モードでブロックされています。 <br>バックティック演算子 この関数はセーフ モードでブロックされています。 <br>shell_exec() (機能的にはバックティック関数と同じ) この関数はセーフ モードでブロックされています。 <br>exec() 操作は、safe_mode_exec_dir で設定されたディレクトリ内でのみ実行できます。何らかの理由で、現在、.. は実行可能オブジェクトのパスに使用できません。 <br>system() 操作は、safe_mode_exec_dir で設定されたディレクトリ内でのみ実行できます。何らかの理由で、現在、実行可能オブジェクトのパスに .. を使用することはできません。 <br>passthru() 操作は、safe_mode_exec_dir で設定されたディレクトリ内でのみ実行できます。何らかの理由で、現在、実行可能オブジェクトのパスに .. を使用することはできません。 <br>popen() 操作は、safe_mode_exec_dir で設定されたディレクトリ内でのみ実行できます。何らかの理由で、現在、実行可能オブジェクトのパスに .. を使用することはできません。 <br>mkdir() は、操作しているディレクトリと実行中のスクリプトの UID が同じかどうかを確認します。 <br>rmdir() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 <br>rename() は、操作しようとしているファイル/ディレクトリが実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 <br>unlink() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 <br>copy() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 (ソースとターゲットで) <br>chgrp() は、操作しようとしているファイル/ディレクトリが実行中のスクリプトと同じ UID を持つかどうかを確認します。 <br>chown() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 <br>chmod() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 また、SUID、SGID、およびスティッキー ビットを設定することはできません。<br>touch() は、操作しようとしているファイル/ディレクトリが実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 <br>symlink() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 (注: テスト対象のみ) <br>link() は、操作しようとしているファイル/ディレクトリが、実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 (注:テスト対象のみ) <br>getallheaders() セーフモードでは「authorization」(大文字と小文字を区別)で始まるヘッダ情報は返されません。警告: getallheaders() は aol-server の下では実装できません。 <br>header() セーフ モードで WWW-Authenticate を設定すると、現在のスクリプトの uid がヘッダーのレルム部分に追加されます。 <br>highlight_file()、show_source() は、操作しようとしているファイル/ディレクトリが実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しようとしているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 (バージョン 4.2.1 以降のみ有効であることに注意してください) <br>parse_ini_file() は、操作しようとしているファイル/ディレクトリが実行中のスクリプトと同じ UID を持つかどうかを確認します。 操作しているディレクトリと実行中のスクリプトの UID が同じかどうかがチェックされます。 (バージョン 4.2.1 以降のみ有効であることに注意してください) <br>php4/main/fopen_wrappers.c を使用する関数 ?? </font> <p style="width:100%;text-align:center;margin:10px 0"> <br> <br> </p> <p style="width:100%;text-align:center;margin:10px 0"> </p> <p class="clear"></p>