13-1 PHPで注意する関数と対応 [PHPセキュリティー]
関数を無効にする
関数を無効にする場合は、PHPディレクティブ(php.ini)の設定を以下のように行います。
1 | disable_functions = "eval, exec" |
指定された関数は無効になります。
eval()
この関数は指定した文字列をPHPのコードとして評価します。
任意のPHPコードを実行できてしまうので非常に危険です。
使用する場合は最新の注意を払う必要があります。
1 | mixed eval ( string $code ) |
exec()
この関数は外部プログラムを実行します。
この関数へ渡すコマンドは escapeshellarg() や escapeshellcmd() を使用して適切にエスケープしましょう。
また、escapeshellarg() や escapeshellcmd()の使用にも注意が必要なので、内容をしっかり把握しましょう。
1 | string exec ( string $command ) |
file()
この関数は指定したファイルの内容を読み込んで配列に格納します。
読み込むファイルの内容は信頼できるものである必要があります。
指定する値は適切にフィルタリングしましょう。
1 | array file ( string $filename ) |
file_get_contents()
この関数は指定したファイルの内容を読み込んで文字列として格納します。
読み込むファイルの内容は信頼できるものである必要があります。
指定する値は適切にフィルタリングしましょう。
1 | string file_get_contents ( string $filename ) |
fopen()
この関数は指定したファイルやURLを開きます。
読み込む内容は信頼できるものである必要があります。
指定する値は適切にフィルタリングしましょう。
1 | resource fopen ( string $filename , string $mode ) |
include()
この関数は指定されたファイルを読み込み、評価します。
読み込む内容は信頼できるものである必要があります。
指定する値は適切にフィルタリングしましょう。
1 | include('パス'); |
requir()
この関数は指定されたファイルを読み込み、評価します。
読み込む内容は信頼できるものである必要があります。
指定する値は適切にフィルタリングしましょう。
1 | requir('パス'); |
passthru()
この関数は指定した外部プログラムを実行します。
1 | void passthru ( string $command ) |
phpinfo()
この関数は現在のPHPの状態に関する情報を出力します。非常に重要な内容なので公開されないように注意する必要があります。
1 | phpinfo(); |
shell_exec()
この関数は指定したシェルコマンドを実行します。結果を文字列として返します。
1 | string shell_exec ( string $cmd ) |
readfile()
この関数は指定したファイルを読み込んで出力します。
読み込む内容は信頼できるものである必要があります。
指定する値は適切にフィルタリングしましょう。
1 | int readfile ( string $filename ) |
system()
この関数は外部プログラムを実行して出力します。
1 | string system ( string $command ) |
その他危険な関数
以下の関数を使用する場合は機能をよく把握した上で使用するようにしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | suexec() proc_open() proc_close() proc_get_status() proc_nice() proc_terminate() popen() pclose() dl() ini_set() virtual() set_time_limit() apache_child_terminate() posix_kill() posix_mkfifo() posix_setpgid() posix_setsid() posix_setuid() escapeshellcmd() escapeshellarg() |
PHP 5.3.x で非推奨の関数
call_user_method() | かわりに call_user_func() を使用します |
call_user_method_array() | かわりに call_user_func_array() を使用します |
define_syslog_variables() | |
dl() | |
ereg() | かわりに preg_match() を使用します |
ereg_replace() | かわりに preg_replace() を使用します |
eregi() | かわりに preg_match() で ‘i’ 修正子を使用します |
eregi_replace() | かわりに preg_replace() で ‘i’ 修正子を使用します |
set_magic_quotes_runtime() およびそのエイリアスである magic_quotes_runtime() | |
session_register() | かわりにスーパーグローバル $_SESSION を使用します |
session_unregister() | かわりにスーパーグローバル $_SESSION を使用します |
session_is_registered() | かわりにスーパーグローバル $_SESSION を使用します |
set_socket_blocking() | かわりに stream_set_blocking() を使用します |
split() | かわりに preg_split() を使用します |
spliti() | かわりに preg_split() で ‘i’ 修正子を使用します |
sql_regcase() | |
mysql_db_query() | かわりに mysql_select_db() および mysql_query() を使用します |
mysql_escape_string() | かわりに mysql_real_escape_string() を使用します |
ロケールカテゴリ名を文字列で渡すこと。 | かわりに LC_* 系の定数を使用します |
is_dst を mktime() に渡すこと。 | かわりにタイムゾーン処理用の新しい関数を使用します |
タグ(=記事関連ワード)
日付
最終更新日:2023年06月01日