PHP セキュリティ
セキュリティ、PHP コード作成は 1 つの側面であり、PHP 構成は非常に重要です。
PHP を手動でインストールしました。PHP のデフォルト設定ファイルは /usr/local/apache2/conf/php.ini にあります。最も重要なことは、PHP をより安全に実行できるように php.ini の内容を設定することです。 。 PHP全体のセキュリティ設定は主にphpshellとSQLインジェクションによる攻撃を防ぐためのものです。ゆっくり説明していきます。まず、編集ツールを使用して /etc/local/apache2/conf/php.ini を開きます。他の方法でインストールした場合は、設定ファイルがこのディレクトリにない可能性があります。
(1) PHP のセーフ モードをオンにする
php のセーフ モードは、system()、
などの PHP の一部の関数を制御できる非常に重要な組み込みのセキュリティ メカニズムです。同時に、多くのファイル操作関数の権限が制御され、/etc/passwd などの特定の重要なファイルが許可されません。
ただし、デフォルトの php.ini はセーフ モードで開きません。 :
safe_mode = on
(2) ユーザー グループのセキュリティ
safe_mode がオンになり、safe_mode_gid がオフになると、PHP スクリプトはファイルにアクセスでき、同じ
内のユーザーもアクセスできます。グループは訪問のためにファイルにアクセスすることもできます。
以下に設定することをお勧めします:
safe_mode_gid = off
これを設定しないと、サーバー Web サイトのディレクトリ内のファイルを操作できなくなる可能性があります。たとえば、操作時にファイルを変更する必要があります。
(3) セーフ モードでプログラムを実行するためのホーム ディレクトリ
セーフ モードがオンになっているが、特定のプログラムを実行したい場合は、プログラムを実行するためのホーム ディレクトリを指定できます:
safe_mode_exec_dir = D:/usr/bin
通常の状況では、プログラムを実行する必要はないため、システム プログラム ディレクトリを指定することをお勧めします。
に続いて、実行する必要があるプログラムをコピーします。例:
safe_mode_exec_dir = D:/tmp/cmd
ただし、プログラムは実行しないことをお勧めします。
safe_mode_exec_dir = D:/usr/www
(4) ファイルをセーフ モードで含めます
いくつかのファイルを含めたい場合は、
safe_mode_include_dir = D:/usr/www/include/
実際、通常、PHP スクリプトに含まれるファイルはプログラム内に記述されています。これは特定のニーズに応じて設定できます。
(5) PHP スクリプトがアクセスできるディレクトリを制御します
open_basedir オプションを使用して、指定されたディレクトリにのみアクセスするように PHP スクリプトを制御します。これにより、PHP スクリプトが アクセスすべきではないファイルを削除し、phpshell の害をある程度制限します。通常は、Web サイトのディレクトリにのみアクセスするように設定できます:
open_basedir = D:/usr/www
(6)危険な機能をオフにする
セーフモードがオンになっている場合、機能の禁止は必要ありませんが、安全性を考慮しております。たとえば、
コマンドを実行できる system() などの PHP 関数や、PHP 情報を表示できる
phpinfo() などの関数を実行したくない場合は、それらを禁止できます。
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
ファイルやディレクトリの操作を禁止したい場合は、多くのファイル操作をオフにすることができます
disable_functions = chdir ,chroot ,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
上記は単なる一般的に使用されるファイル処理関数と呼ばれる部分リストであり、上記の実行コマンド関数とこの関数を組み合わせることもできます。
はほとんどの phpshell に耐えることができます。
(7) http ヘッダーの PHP バージョン情報の漏洩をオフにする
ハッカーがサーバー内の PHP バージョン情報を取得するのを防ぐために、http ヘッダーの PHP バージョン情報の漏洩をオフにすることができます。 http ヘッダーの情報:
expose_php = Off
たとえば、ハッカーが www.12345.com 80 に Telnet した場合、PHP 情報を見ることはできません。
(8) グローバル変数の登録をオフにする
POST または GET を使用して送信された変数を含む、PHP で送信された変数は、グローバル変数として自動的に登録され、直接アクセスできます。
これはサーバーにとって非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします:
register_globals = Off
もちろん、このように設定されている場合は、対応する変数を取得する場合は、GET によって送信された変数 var を取得するなど、合理的な方法を使用する必要があります。PHP プログラマは、$_GET['var'] を使用してこれを取得する必要があります。
(9) SQL インジェクションを防ぐために magic_quotes_gpc をオンにします
SQL インジェクションは非常に危険な問題で、最小のケースでは Web サイトのバックエンド、最悪の場合はサーバー全体に侵入されます。
ので、必ず注意してください。 php.ini には次の設定があります:
magic_quotes_gpc = Off
これがオンになっている場合、ユーザーが送信した SQL クエリは自動的に変換されます。たとえば、「Convert to」など、SQL インジェクションの防止に重要な役割を果たします。 したがって、次のように設定することをお勧めします:
magic_quotes_gpc = On
(10) エラー メッセージ制御
通常、PHP はデータベースに接続されていない場合、またはその他の状況下でエラーを表示します。この種の情報が提供された後、エラー メッセージには PHP スクリプトの現在のパス情報が含まれます。安全なので、一般的にサーバーではエラー プロンプトを無効にすることをお勧めします:
display_errors = Off
エラー メッセージを表示したい場合は、必ず設定してください警告以上を表示するなど、表示エラーのレベル。情報:
error_reporting = E_WARNING & E_ERROR
もちろん、エラー プロンプトをオフにすることをお勧めします。
(11) エラーログ
サーバーが動作している理由を見つけるために、display_errors をオフにしてエラー情報を記録することをお勧めします:
log_errors =
同時に、エラー ログが保存されるディレクトリも設定する必要があります。
error_log = D:/usr/ のように、ルート Apache ログも一緒に保存することをお勧めします。 local/apache2/logs/php_error.log
注: ファイルでは、Apache ユーザーおよびグループに書き込み権限を許可する必要があります。