PHP が非常に強力なサーバーサイド スクリプト言語であることは疑いの余地はありませんが、強力な機能には常に大きな危険が伴います。この章では、PHP の潜在的な危険性を防ぐために PHP のセーフ モードを使用する方法を学びます。
【セーフモード】
PHP のセーフ モードは、複数のユーザー アカウントが存在する PHP オープン Web サーバー上に基本的な安全な共有環境を提供します。 PHP が Web サーバー上でセーフ モードで実行されている場合、一部の機能は完全に無効になり、使用可能な機能の一部は制限されます。
[制限を強制するにはセーフモードを使用してください]
セーフ モードでは、ファイル システムにアクセスしようとする一部の機能が制限されます。 Web サーバーのユーザー ID を実行して、特定のファイルを操作するには、そのファイルに対する読み取りまたは書き込みアクセス権が必要です。PHP がこの制限機能を実装することに問題はありません。
セーフ モードがオンになっている場合、ローカル ファイルの読み取りまたは書き込みを試行すると、PHP は現在アクセスしているユーザーがターゲット ファイルの所有者であるかどうかを確認します。所有者でない場合、操作は無効になります。 (書き込み権限: 下位レベルのファイル アクセス権限では、システム オペレーティング システムでファイルの読み取りまたは書き込みが許可されている場合があります。PHP のセーフ モードでは、他のユーザーのファイルを操作できません。もちろん、Web サーバーでは、グローバル書き込み権限を持つ任意のファイルにアクセスします)
。セーフモードをオンにすると、以下の機能リストの機能が制限されます:
chdir、move_uploaded_file、chgrp、parse_ini_file、chown、rmdir、copy、rename、fopen、require、highlight_file、show_source、include、symlink、link、touch、mkdir、unlink
同様に、PHP 拡張機能の一部の関数も影響を受けます。 (モジュールのロード: セーフモードでは dl 機能が禁止されます。拡張機能をロードしたい場合は、php.ini で拡張機能のオプションを変更し、PHP の起動時にロードするだけです)
PHP セーフ モードがオンになっている場合、オペレーティング システム プログラムを実行する必要がある場合は、safe_mode_exec_dir オプションで指定されたディレクトリ内のプログラムである必要があります。そうでない場合、実行は失敗します。実行が許可された場合でも、フィルタリングのために自動的にescapeshellcmd関数に渡されます。
コマンドを実行する次の関数のリストが影響を受けます:
exec、shell_exec、パススルー、システム、popen
さらに、バックタグ演算子 (`) もオフになります。
セーフモードで実行した場合、エラーは発生しませんが、putenv関数は無効になります。同様に、PHP 環境変数を変更しようとする set_time_limit や set_include_path などの他の関数も無視されます。
[セーフモードをオンにする]
PHP のセーフ モードをオンまたはオフにするには、php.ini のsafe_mode オプションを使用します。現在 Web サーバーを共有しているすべてのユーザーに対してセーフ モードを有効にしたい場合は、構成オプションを次のように設定します。safe_mode = On 関数がファイル システムにアクセスするときに、ファイル所有者がチェックされます。デフォルトでは、ファイル所有者のユーザー ID がチェックされますが、ファイル所有者のグループ ID (GID) を、safe_mode_gid オプションで指定されたものに変更できます。システム上に共有ライブラリ ファイルがある場合、インクルードまたは要求する必要が生じたときに、safe_mode_include_dir オプションを使用してパスを設定し、コードが正常に動作することを確認できます。 (インクルード パス:safe_mode_include_dir オプションを使用してさらに多くのインクルード パスを含める場合は、Unix/Linux システムではコロンを使用して、Windows では include_path オプションと同様にセミコロンを使用して区切ることができます。) たとえば、ファイルをインクルードするにはセーフ モードの /usr/local/include/php で、オプションを次のように設定できます:safe_mode_include_dir = /usr/local/include/php インクルードされたファイルを実行する必要がある場合は、safe_mode_exec_dir オプションを設定できます。たとえば、/usr/local/php-bin パス内のファイルを実行可能にする必要がある場合は、オプションを次のように設定できます。safe_mode_exec_dir = /usr/local/php-bin (実行可能: 実行するプログラムが/usr/bin ディレクトリにある場合、指定したオプションで実行できるパスにこれらのバイナリを接続できます) 特定の環境変数を設定したい場合は、safe_mode_allowed_env_vars オプションを使用できます。このオプションの値は、環境変数のプレフィックスです。デフォルトでは、PHP_ で始まる環境変数が許可されます。これを変更する場合は、このオプションの値をカンマで区切って設定できます。たとえば、次の環境変数 TZ でタイムゾーンが許可されている場合、このオプションの値を次のように変更します。safe_mode_allowed_env_vars = PHP_,TZ [その他のセキュリティ機能] セーフ モードに加えて、PHP は PHP のセキュリティを確保するための他の多くの機能も提供します。 。
[PHP を隠す]
php.ini で Expose_php オプションを使用すると、Web サーバーによる PHP レポート情報の漏洩を防ぐことができます。次のように:expose_php = On この設定全体を使用すると、Web サーバーをターゲットとする自動スクリプトによる一部の攻撃を阻止できます。通常、HTTP ヘッダー情報には次の情報が含まれます。 サーバー: Apache/1.3.33 (Unix) PHP/5.0.3 mod_ssl/2.8.16
OpenSSL/0.9.7c Expose_php オプションをオンにすると、上記ヘッダー情報に PHP のバージョン情報が含まれなくなります。もちろん、ユーザーが Web サイトにアクセスすると、.php ファイル拡張子も表示されます。完全に別のファイル拡張子を使用したい場合は、httpd.conf で次の行を見つける必要があります: AddType application/x-httpd .php そして、.php を任意のファイル拡張子に変更できます。ファイル拡張子はスペースで区切って好きなだけ指定できます。サーバー側で PHP を使用して .html および .htm ファイルを解析する場合は、次のようにオプションを設定します。 AddType application/x-httpd .html .htm (HTML の解析: PHP を使用して解析するように Web サーバーを構成します)すべての HTML ファイルを対象としますが、サーバー側以外のコードでも PHP の解析が必要な場合は、サーバーのパフォーマンスに影響します。静的ページに別の拡張子を使用すると、PHP スクリプト エンジンへの依存がなくなり、パフォーマンスが向上します。)
[ファイルシステムセキュリティ]
セーフ モードでは、スクリプト所有者は自分に属するファイルのみにアクセスできるように制限されますが、open_basedir オプションを使用して、アクセスする必要があるディレクトリを指定できます。ディレクトリを指定すると、PHP はそのディレクトリとそのサブディレクトリ以外のディレクトリへのアクセスを拒否します。 open_basedir オプションはセーフ モード以外でも機能します。ファイル システムが /tmp ディレクトリにのみアクセスするように制限するには、次のオプションを設定します。 open_basedir = /tmp [関数アクセス制御] コンマ区切りを使用して関数名を disable_functions オプションに設定できます。そうすれば、これらの関数は次の手順でオフになります。 PHP スクリプト。この設定はセーフ モード以外でも機能します。 disable_functions = dl もちろん、disable_classes オプションを使用して一部のクラスへのアクセスをオフにすることもできます。
[データベースセキュリティ]
PHP スクリプトに、次のフォーム値に基づいて実行される Mysql クエリが含まれているとします: $sql = “UPDATE mytable SET Col1 = ”.