PHP 自体にはいくら古いバージョンであってもいくつかの問題があります。たとえば、php4.3.10 や php5.0.3 より前にはいくつかの重大なバグがあったため、新しいバージョンを使用することをお勧めします。さらに、現在人気の SQL インジェクションは 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 ではセーフ モードが開かないので、開いてみましょう:
セーフモード = オン
(2) ユーザーグループのセキュリティ
safe_mode がオンで、safe_mode_gid がオフの場合、php スクリプトはファイルにアクセスでき、同じグループ内のユーザーもファイルにアクセスできます。
次のように設定することをお勧めします:
safe_mode_gid = オフ
設定を行わないと、ファイル操作が必要な場合など、サーバーWebサイトのディレクトリ内のファイル操作ができなくなる場合があります。
(3) セーフモードでの実行プログラムのメインディレクトリ
セーフ モードがオンになっているが、特定のプログラムを実行したい場合は、実行するプログラムのホーム ディレクトリを指定できます:
safe_mode_exec_dir = D:/usr/bin
通常の状況では、プログラムを実行する必要はないため、システム プログラム ディレクトリを実行しないことをお勧めします。
などのディレクトリを指定して、実行する必要があるプログラムをコピーします。safe_mode_exec_dir = D:/tmp/cmd
ただし、プログラムを実行しないことをお勧めします。その場合は、Web ディレクトリを指定できます:
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() や phpinfo() などのコマンドを実行できる PHP 関数や、PHP 情報を表示できるその他の関数を実行したくない場合は、それらを禁止できます。
disable_functions = システム、パススルー、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 ヘッダー内の情報をオフにすることができます:
expose_php = オフ
たとえば、ハッカーが www.chinaz.com 80 に Telnet した場合、PHP 情報を見ることはできません。
(8) 登録したグローバル変数を閉じる
PHP で送信された変数 (POST または GET を使用して送信された変数も含む) は自動的にグローバル変数として登録され、直接アクセスできます。これはサーバーにとって非常に安全ではないため、グローバル変数として登録させることはできません。グローバル変数オプションがオフ:
register_globals = オフ
もちろん、これが設定されている場合は、適切な方法を使用して、対応する変数を取得する必要があります。たとえば、GET によって送信された変数 var を取得するには、PHP プログラマが $_GET['var'] を使用する必要があります。これに注意する必要があります。
(9) Magic_quotes_gpc をオンにして SQL インジェクションを防止します
SQL インジェクションは、Web サイトのバックエンドに侵入したり、サーバー全体がダウンしたりする可能性がある非常に危険な問題ですので、注意してください。 php.ini に次の設定があります:
magic_quotes_gpc = オフ
これはデフォルトではオフになっています。オンにすると、' を ' に変換するなど、ユーザーが送信した SQL クエリが自動的に変換されます。これは SQL インジェクションの防止に重要な役割を果たします。したがって、次のように設定することをお勧めします:
magic_quotes_gpc = オン
(10) エラーメッセージ制御
一般に、PHP はデータベースに接続されていない場合、またはその他の状況下でエラーを表示します。一般に、エラー メッセージには PHP スクリプトの現在のパス情報やクエリの SQL ステートメントが含まれます。この種の情報は安全ではありません。ハッカーに提供された後、通常、サーバーはエラー プロンプトを無効にすることをお勧めします:
display_errors = オフ
エラー情報を表示したい場合は、警告以上の情報のみを表示するなど、エラー表示のレベルを必ず設定してください:
error_reporting = E_WARNING & E_ERROR
もちろん、それでもエラープロンプトをオフにすることをお勧めします。
(11) エラーログ
サーバー操作の理由を見つけやすくするために、display_errors を閉じた後にエラー情報を記録することをお勧めします:
log_errors = オン
同時に、エラー ログを保存するディレクトリも設定する必要があります。ルート Apache ログも一緒に保存することをお勧めします。
error_log = D:/usr/local/apache2/logs/php_error.log
注: Apache ユーザーとグループに書き込み権限を与えるには、このファイルを指定する必要があります。
MYSQL の権限を削減した操作
mysqlstart
などの新しいユーザーを作成します。net user mysqlstart ****microsoft /add net localgroup users mysqlstart /del
どのグループにも属していません
MYSQL が d:mysql にインストールされている場合は、mysqlstart にフル コントロールのアクセス許可を与えます。次に、システム サービスで MYSQL サービス プロパティを設定し、ログイン プロパティでこのユーザー mysqlstart を選択し、パスワードを入力して確認します。 MYSQL サービスを再起動すると、MYSQL は低い特権で実行されます。
Apache が Windos プラットフォーム上に構築されている場合、Apache はデフォルトでシステム権限で実行されることに注意する必要があります。これは恐ろしく、人々に不快感を与えます。その場合は、Apache の権限を下げる必要があります。
net user apache ****microsoft /add net localgroup users apache /del
どのグループにも属さないユーザー apche が作成されます。
コンピューターマネージャーを開き、サービスを選択し、Apache サービスのプロパティをクリックし、ログオンを選択し、このアカウントを選択し、上記で作成したアカウントとパスワードを入力し、Apache サービスを再起動します。OK、Apache は低い権限で実行されています。
実際、Apache ユーザーが実行したいことのみを実行できるように各フォルダーの権限を設定し、ディレクトリごとに個別の読み取り/書き込みユーザーを作成することもできます。これは、多くの仮想ホスト プロバイダーで使用される一般的な構成方法でもありますが、これを防ぐために使用すると過剰になります。