システム開発スクール講座

システム制作やプログラミングの初心者向けシステム開発WEB講座スクール

PHPセーフモード(SAFE MODE)関数制限


PHPではセキュリティ上セーフモードというアクセス制限に関する機能がありますが、
セーフモードによって制限される関数について、参照用にエントリーしました。


なお、PHP 5.3.0以降ではセーフモード機能は非推奨となり、php.netではセーフモード機能の非使用が強く推奨されています。
よって、今後はあまり意識する必要もすくないでしょう。



■セーフモード(safe-mode)機能で制限もしくは無効となる関数群

ただし、すべてが完全に対象となるわけでもなく、確実性は保証されません。



・dbmopen() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
dbase_open() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・filepro() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・filepro_rowcount() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・filepro_retrieve() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・ifx_*() sql_safe_mode restrictions, (!= safe mode)
・ingres_*() sql_safe_mode restrictions, (!= safe mode)
mysql_*() sql_safe_mode restrictions, (!= safe mode)
・pg_lo_import() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
posix_mkfifo() 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・putenv() iniディレクティブのsafe_mode_protected_env_vars および safe_mode_allowed_env_varsに依存します。 putenv()のドキュメントも参照ください。
・move_uploaded_file() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・chdir() 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・dl() この関数は、PHP が safe-mode で動作している場合は無効となります。
・backtick operator この関数は、PHP が safe-mode で動作している場合は無効となります。
・shell_exec() (functional equivalent of backticks) この関数は、PHP が safe-mode で動作している場合は無効となります。
・exec() safe_mode_exec_dir の中でのみ実行可能です。現実的な理由により、現在、実行パスに ..を含めることは許可されていません。 escapeshellcmd()はこの関数の引数にたいして 実行できます。
・system() safe_mode_exec_dir の中でのみ実行可能です。現実的な理由により、現在、実行パスに ..を含めることは許可されていません。 escapeshellcmd()はこの関数の引数にたいして 実行できます。
・passthru() safe_mode_exec_dir の中でのみ実行可能です。現実的な理由により、現在、実行パスに ..を含めることは許可されていません。 escapeshellcmd()はこの関数の引数にたいして 実行できます。
・popen() safe_mode_exec_dir の中でのみ実行可能です。現実的な理由により、現在、実行パスに ..を含めることは許可されていません。 escapeshellcmd()はこの関数の引数にたいして 実行できます。
・fopen() 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・mkdir() 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・rmdir() 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・rename() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・unlink() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・copy() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。 ( sourceおよび targetにおいて)
・chgrp() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・chown() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
・chmod() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 加えて、SUID, SGID, スティキービットを設定する ことはできません
・touch() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。
・symlink() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。 (注意: ターゲットのみが 確認されます)
・link() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。 (注意: ターゲットのみが 確認されます)
apache_request_headers() セーフモードでは、authorization で始まるヘッダ(大文字小文字は 区別されません)は返されません。
・header() セーフモードでは、WWW-Authenticate (HTTP認証)ヘッダをセットする場合に realmパートに スクリプトのUIDがセットされます。
PHP_AUTH variables セーフモードでは、PHP_AUTH_USER, PHP_AUTH_PW, AUTH_TYPEは $_SERVERに含まれません。 にも関わらず、USERにREMOTE_USERを使うことは未だ可能です。 (PHP4.3.0以降でのみ影響)
・highlight_file(), show_source() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。 (注: PHP 4.2.1以降でのみ影響する)
・parse_ini_file() 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。 (注: PHP 4.2.1以降でのみ影響する)
・set_time_limit() PHPがセーフモードで実行されている場合は影響を受けません。
・max_execution_time PHPがセーフモードで実行されている場合は影響を受けません。
・mail() セーフモードでは、5番目のパラメータが無効となります。(注意: PHP 4.2.3以降のみ適用)
・session_start() デフォルトの files session.save_handler を使う場合は、スクリプトのオーナーが session.save_path ディレクトリのオーナーと同じでなければなりません。
すべてのファイルシステム関数およびストリーム関数 処理を行うファイル/ディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。 処理を行うディレクトリが実行するスクリプトと同じ UID を有しているかどうかを確認します。 (php.ini オプション safe_mode_include_dir を参照ください)。


【引用:php.net PHP Manual セーフモード】