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