長年にわたり、PHP は Web ベースのアプリケーションを実行するための安定した安価なプラットフォームでした。ほとんどの Web ベースのプラットフォームと同様、PHP は外部からの攻撃に対して脆弱です。開発者、データベースアーキテクト、システム管理者はすべて、PHP アプリケーションをサーバーに展開する前に予防措置を講じる必要があります。ほとんどの予防策は、数行のコードまたはアプリケーション設定のわずかな調整で実現できます。
#1: 管理インストールスクリプト
開発者がサードパーティ アプリケーション用の一連の PHP スクリプトをインストールしている場合、このスクリプトはアプリケーション全体の動作コンポーネントをインストールし、アクセス ポイントを提供するために使用されます。ほとんどのサードパーティ パッケージでは、インストール後にこのディレクトリに含まれるインストール スクリプトを削除することをお勧めします。ただし、インストール スクリプトを保持したい開発者は、ディレクトリへの管理アクセスを制御する .htaccess ファイルを作成できます。
認証タイプ Basic
認証名「管理者のみ」
AuthUserFile /usr/local/apache/passwd/passwords
有効なユーザーが必要です
権限のないユーザーが保護されたディレクトリにアクセスしようとすると、ユーザー名とパスワードの入力を求めるプロンプトが表示されます。パスワードは、指定された「パスワード」ファイル内のパスワードと一致する必要があります。
#2: ヘッダーファイル
多くの場合、開発者はアプリケーション全体に分散された複数のスクリプトを 1 つのスクリプトに含めることができます。これらのスクリプトには、個々のファイルを元のページのコードに統合する「include」ディレクティブが含まれます。 「インクルード」ファイルにユーザー名、パスワード、データベース アクセス キーなどの機密情報が含まれている場合、ファイルには通常の「.inc」拡張子ではなく「.php」拡張子が必要です。 「.php」拡張子により、PHP エンジンがファイルを処理し、不正なアクセスが防止されます。
#3: MD5 対 SHA
場合によっては、ユーザーが独自のユーザー名とパスワードを作成することになり、サイト管理者はフォーム送信パスワードを暗号化してデータベースに保存することがよくあります。以前は、開発者は MD5 (メッセージ ダイジェスト アルゴリズム) 関数を使用して 128 ビット文字列のパスワードを暗号化していました。現在、多くの開発者は SHA-1 (セキュア ハッシュ アルゴリズム) 関数を使用して 160 ビット文字列を作成しています。
#4: 自動グローバル変数
php.ini ファイルに含まれる設定は「register_globals」と呼ばれます。 P サーバーは、register_globals 設定に基づいて、サーバー変数とクエリ文字列のグローバル変数を自動的に作成します。 Joomla や Drupal などのコンテンツ管理ソフトウェアなどのサードパーティ ソフトウェア パッケージをインストールする場合、インストール スクリプトはユーザーに register_globals を「オフ」に設定するように指示します。設定を「オフ」に変更すると、権限のないユーザーが変数名を推測したりパスワードを確認したりしてデータにアクセスできなくなります。
#5: 変数と値を初期化する
多くの開発者は、時間の制約または労力不足による注意力の低下により、インスタンス化された変数に値を割り当てられないという罠に陥っています。認証プロセス中の変数には、ユーザーのログインプロセスが開始される前に値が設定されている必要があります。この簡単な手順により、ユーザーが検証プロセスをバイパスしたり、権限のないサイトの特定の領域にアクセスしたりすることが防止されます。