インターネットの開発により、ファイルのアップロード機能は、ウェブサイトの開発においてますます重要になっています。ただし、PHPファイルのアップロード関数は、セキュリティリスクをもたらす可能性もあります。ハッカーは、悪意のあるファイルをアップロードするために脆弱性を活用して、ウェブサイトを攻撃する場合があります。この記事では、PHPファイルのアップロード脆弱性の原則と攻撃方法を紹介し、効果的な保護対策を提供します。
PHPファイルのアップロード脆弱性は、主に次の2つの側面から発生します。
ファイルタイプの確認は不完全です:$ _files Arrayは、ファイルのアップロードを処理するために使用されます。アップロードプロセス中、$ _FILESには、ファイルのサイズ、タイプなどの情報が含まれています。ただし、攻撃者はリクエストを偽造し、許可されたファイルタイプとして悪意のあるファイルを偽装することができます。
Impoperファイル実行権限:PHPサーバーがファイルを保存およびアップロードすると、ファイルの実行権限が正しく設定またはチェックされていない場合、攻撃者は悪意のあるファイルをアップロードして任意のコードを実行できます。
ファイルタイプバイパス:攻撃者は、「Evil.php」を「Evil.jpg」としてアップロードしたり、他の方法で悪意のあるコードを実行したりするなど、ファイル拡張機能をバイパスサーバー検証に変更できます。
スレッド競争攻撃:攻撃者は複数のファイルを同時にアップロードします。レース条件を作成することにより、彼は悪意のあるファイルを正当なファイルに置き換え、サーバーがコンテンツのアップロードを誤って実行します。
PHPファイルのアップロード脆弱性を防ぐために、次の測定値をとることができます。
セットホワイトリスト:アップロードが許可されているファイルタイプを制限し、特定のタイプのファイルのみをアップロードできます。サンプルコードは次のとおりです。
$allowedTypes = ['jpg', 'jpeg', 'png'];
$fileExt = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($fileExt, $allowedTypes)) {
die("File type not allowed.");
}
ファイルネーミング戦略:ファイルのアップロードは、ランダムに生成されたファイル名を使用し、日付またはプレフィックスと組み合わせて一意性を確保し、ファイル名を推測して攻撃者がファイルにアクセスするのを防ぐ必要があります。
ファイルサイズの制限:サーバーリソースを使い果たすファイルの過度のアップロードを防ぎます。サンプルコードは次のとおりです。
$maxSize = 1024 * 1024; // 1MB
if ($_FILES['file']['size'] > $maxSize) {
die("File size exceeds limit.");
}
ファイルのコンテンツを確認する:ファイル拡張子を確認するだけでなく、ファイルコンテンツを解析し、画像ファイルを確認して有効な形式であることを確認するなど、ファイルコンテンツを解析します。
if (exif_imagetype($_FILES['file']['tmp_name']) === false) {
die("Invalid image file.");
}
ファイル許可制御:ファイルを保存およびアップロードするときは、ファイルが実行可能でないことを確認してください。読み取り専用のアクセス許可を設定したり、実行許可をブロックすることにより、コードが実行されるのを防ぐことができます。
要約すると、PHPファイルのアップロード脆弱性は一般的なセキュリティリスクですが、ファイルタイプの確認、ファイルの命名ポリシー、ファイルサイズの制限、ファイルコンテンツ検査、およびファイル許可制御を強化することにより、そのような脆弱性を効果的に保護し、ウェブサイトとユーザーを保証できます。